ファイルの特定の行に出力を追加する方法

ファイルの特定の行に出力を追加する方法

ファイルの特定の行にシェルスクリプト出力を追加したいと思います。

同様のことができますが、ファイルの終わりではなくファイルの3行目に出力を追加できますか?

sh ./myScript.sh >> myFile.txt

答え1

このソリューションは、最初の3行をに保存し/tmp/first、ファイルの残りの部分をに保存し/tmp/last、出力をに保存してmyScript.shから、すべて元に戻して元の/tmp/middleファイルcatを上書きするように機能します/tmp/file

file=/tmp/file
sed -n '1p;2p;3p' "${file}" >/tmp/first
sed '1d;2d;3d' "${file}" >/tmp/last
./myScript.sh >/tmp/middle
cat /tmp/first /tmp/middle /tmp/last >/tmp/file

答え2

GNU sedにアクセスできる場合は、次のように入力ファイルの3行目にターゲットを追加できます。

sh ./myScript.sh | sed -i -e '3r /dev/stdin' myFile.txt

答え3

の出力がmyScript.sh1つ以上の行で、元のファイルの行3と4の間に新しい行として挿入する場合:

$ sh ./myScript.sh | perl -i -pe 'print <STDIN> if $.==4' myFile.txt

上記で出力が改行文字で終わらない場合に<STDIN>に変更します。<STDIN>,"\n"myScript.sh

出力がmyScript.sh1行で、新しい行を挿入せずに3行目の末尾に追加したい場合:

$ sh ./myScript.sh | perl -i -ple 'chomp($_.=<STDIN>) if $.==3' myFile.txt

関連情報