3

私は3つsedのコマンドを持っています:

sed -n 's/.*domain=\([^&]*\).*sdk_ver=\([^&]*\).*/\1 \2/p' inputfile > outputfile
sed -n 's/.*sdk_version=\([^&]*\).*domain=\([^&]*\).*/\2 \1/p'  inputfile > outputfile
sed -n 's/.*domain=\([^&]*\).*sdk_version=\([^&]*\).*/\1 \2/p' inputfile > outputfile

各コマンドには基準があります。3つのコマンドを1つのコマンドに入れて、3つの基準の和集合としてすべての結果を含む単一の出力ファイルを取得したいと思います。

4

3 に答える 3

13

複数の Sed 式を使用する

複数の sed 式を改行で区切ってスクリプトに配置するか、 -eオプションで区切られた複数の式として配置できます。例えば:

sed -n -e 's/.*domain=\([^&]*\).*sdk_ver=\([^&]*\).*/\1 \2/'      \
       -e 's/.*sdk_version=\([^&]*\).*domain=\([^&]*\).*/\2 \1/'  \
       -e 's/.*domain=\([^&]*\).*sdk_version=\([^&]*\).*/\1 \2/p' \
       inputfile > outputfile

この例では、sed は各入力行で式を順番に実行し、シーケンスの最後の式が処理された後にのみパターン スペースを出力します。これを行うには確かに他の方法がありますが、あなたの例を考えると、これが最も適切なようです。

于 2012-07-19T21:57:31.907 に答える
1

sed -e;別々のコマンドを使用して 1 行に書き込むことができます。

sed -e 's/.*domain=\([^&]*\).*sdk_ver=\([^&]*\).*/\1 \2/ ; s/.*sdk_version=\([^&]*\).*domain=\([^&]*\).*/\2 \1/ ; s/.*domain=\([^&]*\).*sdk_version=\([^&]*\).*/\1 \2/p'

軽微な修正 - 「-ne」は必要ありません。「-e」のみが機能します。

于 2012-07-22T15:02:05.313 に答える
0

これはうまくいきませんか?

sed -n 's/.*domain=\([^&]*\).*sdk_ver=\([^&]*\).*/\1 \2/p' inputfile | sed -n 's/.*sdk_version=\([^&]*\).*domain=\([^&]*\).*/\2 \1/p' | sed -n 's/.*domain=\([^&]*\).*sdk_version=\([^&]*\).*/\1 \2/p' > outputfile
于 2012-07-19T21:54:07.343 に答える