次のコマンドは、4行目にパターンを追加します。
sed -i '4i pattern' file
ただし、ファイルに4行未満が含まれていると機能しません。要件は、4行目に空のプレフィックス行を含むパターンを追加する必要があることです。
予想される結果:cat -n file
1 line1
2
3
4 pattern
GNU sed バージョン 4.2.1
答え1
少なくとも4行があることを確認するために、いくつかの空白行でファイルを埋めることができます。
{ cat file; echo; echo; echo; } | sed -e '4i pattern'
後に続く空白行を切り取るには、次のようにパイプできます。
| sed -n 'H; ${g; s/^\n//; s/\n\+$//; p}'
または
| tac | awk '/./{p=1}p' | tac
または、最小数の空白行を追加してください。
{ cat file; for ((i=$(wc -l <file); i<3; i++)); do echo; done; } | sed '3a pattern'
sedプログラムは、4行目の前に挿入する代わりに3行目の後に追加するように変更されました。
答え2
file
行数が十分であることを確認してくださいwc -l
(行数の計算)。
ファイルに十分な行がない場合、警告が表示されます。
[ $(cat file | wc -l) -ge 4 ] && sed -i '4s pattern' file || echo "not enough lines"