sedを使用して「test message1」の後に新しい行を追加するには? [コピー]

sedを使用して「test message1」の後に新しい行を追加するには? [コピー]

実際には.というファイルがありますtest1.txt

そのファイルには次の5行があります。

 'test message1'
 'test message2'
 'test message3'
 'test message4'
 'test message5'

これで、この行の後にファイル'testing testing'に新しい行を追加したいと思います。どうすればいいですか?test1.txt'test message1'

答え1

これはaこのコマンドは次のことを行います。

sed -e "/test message1/a\\
'testing testing'" < data

このコマンドは次のことを行います。

現在のサイクルの終わりまたは次の入力行を読み取るときに、出力のためにこのコマンドの後に続くテキスト行(出力から削除される\で終わる最後の行を除く)をキューに入れます。

したがって、この場合、pendと行を一致させると、/test message1/ファイルの新しい行となるテキスト引数 ""を使用してコマンドを実行します。a'testing testing'

 'test message1'
 'testing testing'
 'test message2'
 'test message3'
 'test message4'
 'test message5'

最後ではなく各行をバックスラッシュで終了すると、複数行を挿入できます。上記の二重バックスラッシュは、シェルがそれを食べることを防ぐためのものです。スタンドアロンスクリプトで使用している場合は、sed単一のバックスラッシュを使用してください。 GNUはまた、後ろsedに1行のテキストを許可しますaが、これは移植可能ではありません。

答え2

そしてsed

sed "s/'test message1'/'test message1'\n'testing testing'/g"
  • 「テストメッセージ1」を検索してください。
  • 「テストメッセージ1」[新しい行]「テストテスト」に置き換えます。

~からこの回答、以下を使用することもできます。

sed "/'test message1'/a 'testing testing'"
  • 「テストメッセージ1」を検索してください。
  • ゲームの後ろに「テストテスト」を追加してください。

答え3

POSIX的に:

$ sed -e "/'test message1'/s//&\\
'testing testing'/" file
'test message1'
'testing testing'
'test message2'
'test message3'
'test message4'
'test message5'

関連情報