我想将 shell 脚本输出附加到文件中的特定行。
是否可以执行类似的操作,但将输出附加到文件的第三行,而不是文件末尾?
sh ./myScript.sh >> myFile.txt
答案1
该解决方案的工作原理是将前 3 行保存到/tmp/first
,将文件的其余部分保存到/tmp/last
,保存 to 的输出,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,那么您可以将目标追加到输入文件的第三行,如下所示:
sh ./myScript.sh | sed -i -e '3r /dev/stdin' myFile.txt
答案3
如果 的输出myScript.sh
是一行或多行,并且您希望将其作为新行插入到原始文件的第 3 行和第 4 行之间:
$ sh ./myScript.sh | perl -i -pe 'print <STDIN> if $.==4' myFile.txt
在上面,如果 的输出不以换行符结尾,<STDIN>
则更改为 。<STDIN>,"\n"
myScript.sh
如果 的输出myScript.sh
是单行,并且您希望将其附加到第三行的末尾,而不插入新行:
$ sh ./myScript.sh | perl -i -ple 'chomp($_.=<STDIN>) if $.==3' myFile.txt