1つの正規表現を置き換えてから、最初の正規表現と一致しないすべての行で2番目の正規表現を置き換えます。

1つの正規表現を置き換えてから、最初の正規表現と一致しないすべての行で2番目の正規表現を置き換えます。

例アクション:行にが含まれている場合はfooそれをに置き換えbar、それ以外の場合はbaz行に追加します。

sed -e s/foo/bar/ -e s/$/baz/最初のコマンドが一致しているかどうかにかかわらず、2番目のコマンドが実行されるため、機能しません。sedゲームが終了したら、次の行に移動するようにゲームに指示する方法はありますか?

ベストアンサー1

t正常な交換後に次のサイクルを開始するには、ラベルなしでコマンドを使用できます。

$ cat ip.txt 
a foo 123
xyz
fore
1foo

$ sed -e 's/foo/bar/' -e t -e 's/$/baz/' ip.txt
a bar 123
xyzbaz
forebaz
1bar

マニュアルから:

tタグ(テスト)

最後の入力行を読み取った後、または条件分岐を実行してから交換が成功した場合にのみラベルに分岐します。ラベルは省略できます。この場合、次のサイクルが開始されます。

おすすめ記事