Omri Asked: 2018-06-14 03:01:24 +0800 CST2018-06-14 03:01:24 +0800 CST 2018-06-14 03:01:24 +0800 CST 如何将输出附加到文件中的特定行 772 我想将 shell 脚本输出附加到文件中的特定行。 是否可以做类似的事情,但是将输出附加到文件的第三行,而不是文件的末尾? sh ./myScript.sh >> myFile.txt text-processing io-redirection 3 个回答 Voted Best Answer rusty shackleford 2018-06-14T03:11:06+08:002018-06-14T03:11:06+08:00 该解决方案的工作原理是将前 3 行/tmp/first保存到 ,将文件的其余部分保存到,然后/tmp/last将输出保存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 Rakesh Sharma 2018-06-14T22:20:12+08:002018-06-14T22:20:12+08:00 如果您可以访问 GNU sed,那么您可以将目标附加到输入文件的第 3 行,如下所示: sh ./myScript.sh | sed -i -e '3r /dev/stdin' myFile.txt haukex 2018-06-14T03:18:53+08:002018-06-14T03:18:53+08:00 如果输出myScript.sh是一行或多行,并且您希望将其作为新行插入到原始文件的第 3 行和第 4 行之间: $ sh ./myScript.sh | perl -i -pe 'print <STDIN> if $.==4' myFile.txt 在上面,更改<STDIN>为<STDIN>,"\n"if 的输出myScript.sh没有以换行符结束。 如果 的输出myScript.sh是单行,并且您希望将其附加到第三行的末尾,而不插入新行: $ sh ./myScript.sh | perl -i -ple 'chomp($_.=<STDIN>) if $.==3' myFile.txt
该解决方案的工作原理是将前 3 行
/tmp/first
保存到 ,将文件的其余部分保存到,然后/tmp/last
将输出保存myScript.sh
到 ,然后将它们全部重新组合在一起并覆盖原始文件:/tmp/middle
cat
/tmp/file
如果您可以访问 GNU sed,那么您可以将目标附加到输入文件的第 3 行,如下所示:
如果输出
myScript.sh
是一行或多行,并且您希望将其作为新行插入到原始文件的第 3 行和第 4 行之间:在上面,更改
<STDIN>
为<STDIN>,"\n"
if 的输出myScript.sh
没有以换行符结束。如果 的输出
myScript.sh
是单行,并且您希望将其附加到第三行的末尾,而不插入新行: