sedを使用して連続した2行を置き換える

sedを使用して連続した2行を置き換える

連続した行を次に変更しようとしましたsed

sed -i -e '/string1/{N;s/string2/string2_replaced/;N;s/string3/string3_replaced}' file1

sed -i -e '/string1/{n;s/string2/string2_replaced/;n;s/string3/string3_replaced}' file1

ここで、file1 には以下が含まれます。

string1
string2
string3

私は続けてsed: unmatched '/'。 file1の内容を次のように変更するには:

string1
string2_replaced
string3_replaced

それでは、string2とstring3は、連続した行にあり、string1に一致する行の直後にある場合にのみ置き換えられますか?

また、string2が正確にどこに表示されるか(どの行)はわかりませんが、string1の後に表示されることは確実な場合は、string2を検索して置き換える方法は何ですか?

答え1

/次の最後の項目を見逃しましたs/string3/string3_replaced/

sed -e '/string1/{N;s/string2/string2_replaced/;N;s/string3/string3_replaced/}' file1

sedすべての実装が同じ行で複数のコマンドをサポートしているわけではありません。移植性のために:{}

sed -e '/string1/ {
  N
  s/string2/string2_replaced/
  N
  s/string3/string3_replaced/
}' file1

関連情報