値がyesYES
の場合は実行してくださいNO
。その場合は、そうNO
してくださいYES
。たとえば、次のコマンドを使用しています。
( echo "online=YES"; echo "online=NO" ) | sed -e 's/online=YES/online=NO/' -e 's/online=NO/online=YES/'
online=YES
online=YES
最初のパターンが一致した場合は、2番目のパターンをスキップする必要があります。これはnext
のと同じですawk
。
ベストアンサー1
sed -e 's/online=YES/online=NO/' -e t -e 's/online=NO/online=YES/'
入力行が最後に読み込まれてから前のコマンドが置き換えられた場合、t
コマンドは指定されたラベル(sed
またはラベルが指定されていない場合はスクリプトの終わり)に分岐されます。sed
s
この場合、最初の置換が行われると、2番目の置換は無視されます。
online=YES
online=NO
複数の行または1つの行がある場合は、次を使用してください。
sed -e 's/online=YES/online=MAYBE/g' \
-e 's/online=NO/online=YES/g' \
-e 's/online=MAYBE/online=NO/g'
ここで、文字列はパターンに関連付けMAYBE
られていません。online=
これは、一時変数を使用して両方の変数の値を変更するのと本質的に似ています。
テスト:
$ echo "online=YES online=YES online=NO online=YES" | sed -e 's/online=YES/online=MAYBE/g' -e 's/online=NO/online=YES/g' -e 's/online=MAYBE/online=NO/g'
online=NO online=NO online=YES online=NO
n
このコマンドが最初の例のコマンドを完全に置き換えることができない理由t
は、このコマンドがスクリプトの途中で次の入力行を読み取り、その行でスクリプトの後半を実行するためです。
$ ( echo "online=YES"; echo "online=YES" ) | sed -e 's/online=YES/online=NO/' -e n -e 's/online=NO/online=YES/'
online=NO
online=YES
同じ出力が2行表示されますNO
。