如何写入第10行?

jmi*_*zas 4 shell perl awk sed

我需要一个脚本,可以将文本写入从第10行开始的现有文件.它是一个空行,所以它不会是一个查找/替换.希望它最好是bash,但终端可以解释的任何东西都可以正常工作.

RE-EDITED:
Run Code Online (Sandbox Code Playgroud)

对不起,但在我测试后仍然有一些问题...认为它与我想要写入文件有关.也许这会让它变得更容易..

  3 c
  4 d
  5 e
  6 f
  7 g
  8 h
  9 i
 10      zone "$zone" in {
 12          type master;
 13          file "/etc/bind/db.$zone";
 14   };
 15 k
 16 l
 17 m
Run Code Online (Sandbox Code Playgroud)

乔,先谢谢你

Mik*_*kel 8

使用sed:

sed -i -e '10a\
new stuff' file
Run Code Online (Sandbox Code Playgroud)

使用bash:

IFS=$'\n'
i=0
while read -r line; do
    i=$((i+1))
    if test $i -eq 10; then
        echo "new stuff"
    else
        echo "$line"
    fi
done <file >file.tmp
mv file.tmp file
Run Code Online (Sandbox Code Playgroud)

请注意,我不确定你的意思是插入第10行还是第11行,所以仔细检查我10上面写的地方.您可能需要9sed命令或11bash版本.

perl,您可以使用该$NR变量.

open FILEHANDLE, "<file";
while (<FILEHANDLE>) {
    if ($NR == 10) {
        # do something
    }
}
Run Code Online (Sandbox Code Playgroud)

awk,它是NR.

awk 'NR != 10 { print }
NR == 10 { print "Something else" }' file
Run Code Online (Sandbox Code Playgroud)

但请注意,您可以找到并替换空白行,例如

sed -i -e 's/^$/replacement text/' file
Run Code Online (Sandbox Code Playgroud)