
ファイルの特定の行にシェルスクリプト出力を追加したいと思います。
同様のことができますが、ファイルの終わりではなくファイルの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.sh
1つ以上の行で、元のファイルの行3と4の間に新しい行として挿入する場合:
$ sh ./myScript.sh | perl -i -pe 'print <STDIN> if $.==4' myFile.txt
上記で出力が改行文字で終わらない場合に<STDIN>
に変更します。<STDIN>,"\n"
myScript.sh
出力がmyScript.sh
1行で、新しい行を挿入せずに3行目の末尾に追加したい場合:
$ sh ./myScript.sh | perl -i -ple 'chomp($_.=<STDIN>) if $.==3' myFile.txt