![sedを使用して「test message1」の後に新しい行を追加するには? [コピー]](https://linux33.com/image/54082/sed%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%97%E3%81%A6%E3%80%8Ctest%20message1%E3%80%8D%E3%81%AE%E5%BE%8C%E3%81%AB%E6%96%B0%E3%81%97%E3%81%84%E8%A1%8C%E3%82%92%E8%BF%BD%E5%8A%A0%E3%81%99%E3%82%8B%E3%81%AB%E3%81%AF%EF%BC%9F%20%5B%E3%82%B3%E3%83%94%E3%83%BC%5D.png)
実際には.というファイルがあります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'