如何将输出附加到文件中的特定行

如何将输出附加到文件中的特定行

我想将 shell 脚本输出附加到文件中的特定行。

是否可以执行类似的操作,但将输出附加到文件的第三行,而不是文件末尾?

sh ./myScript.sh >> myFile.txt

答案1

该解决方案的工作原理是将前 3 行保存到/tmp/first,将文件的其余部分保存到/tmp/last,保存 to 的输出,myScript.sh然后/tmp/middlecat它们全部重新组合在一起并覆盖原始的/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

相关内容