行の値を変更するには?

行の値を変更するには?

値が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またはラベルが指定されていない場合はスクリプトの終わり)に分岐されます。seds

この場合、最初の置換が行われると、2番目の置換は無視されます。


online=YESonline=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

おすすめ記事