これを行う方法を見つけるのにしばらく時間がかかったので、他の誰かが同じことを探している場合に備えて投稿してください。
パターンの後に改行を追加するには、次のように言うこともできます。
sed '/pattern/{G;}' filename
引用 GNU sedマニュアル :
G
Append a newline to the contents of the pattern space, and then append the contents of the hold space to that of the pattern space.
編集:
ちなみに、これはたまたま sed one liners でカバーされています:
# insert a blank line below every line which matches "regex"
sed '/regex/G'
このsedコマンド:
sed -i '' '/pid = run/ a\
\
' file.txt
次の行を見つけます:pid = run
file.txt前
; Note: the default prefix is /usr/local/var
; Default Value: none
;pid = run/php-fpm.pid
; Error log file
file.txt内のその行の後に改行を追加します
file.txt after
; Note: the default prefix is /usr/local/var
; Default Value: none
;pid = run/php-fpm.pid
; Error log file
または、テキストと改行を追加する場合:
sed -i '/pid = run/ a\
new line of text\
' file.txt
file.txt after
; Note: the default prefix is /usr/local/var
; Default Value: none
;pid = run/php-fpm.pid
new line of text
; Error log file
単純な置換はうまく機能します:
sed 's/pattern.*$/&\n/'
例:
$ printf "Hi\nBye\n" | sed 's/H.*$/&\nJohn/'
Hi
John
Bye
標準に準拠するには、\ nをバックスラッシュ改行で置き換えます。
$ printf "Hi\nBye\n" | sed 's/H.*$/&\
> John/'
Hi
John
Bye
sed '/pattern/a\\r' file name
パターンの後にリターンが追加され、g
がパターンを空白行に置き換えます。
ファイルの最後に新しい行(空白)を追加する必要がある場合は、これを使用します。
sed '$a\\r' file name
別の可能性、例えば空の保持レジスタがない場合、次のようになります。
sed '/pattern/{p;s/.*//}' file
説明:/pattern/{...}
=コマンドのシーケンスを適用し、パターンのある行が見つかった場合、p
=現在の行を出力し、;
=コマンド間の区切り、s/.*//
=パターンレジスタ内の何も置き換えないで、
空のパターンレジスタを追加行として自動的に印刷します)