Perl 如何写入第10行?
我需要一个脚本,可以写文本到一个现有的文件,从第10行开始。这是一个空行,因此不会是查找/替换。最好是在bash中,但是终端可以解释的任何内容都可以正常工作Perl 如何写入第10行?,perl,shell,sed,awk,Perl,Shell,Sed,Awk,我需要一个脚本,可以写文本到一个现有的文件,从第10行开始。这是一个空行,因此不会是查找/替换。最好是在bash中,但是终端可以解释的任何内容都可以正常工作 RE-EDITED: 抱歉,我测试后还是有点问题。。。我想这和我想写什么文件有关。也许这会让事情变得更容易 3 c 4 d 5 e 6 f 7 g 8 h 9 i 10 zone "$zone" in { 12 type master; 13 file "/
RE-EDITED:
抱歉,我测试后还是有点问题。。。我想这和我想写什么文件有关。也许这会让事情变得更容易
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
提前感谢,,
Joe使用
sed
:
sed -i -e '10a\
new stuff' file
使用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
在awk
中,它是NR
awk 'NR != 10 { print }
NR == 10 { print "Something else" }' file
但请注意,您可以查找并替换空行,例如
sed -i -e 's/^$/replacement text/' file
你可以这样做:
head -10 fileA > fileB; echo "new text" >> fileB;
请注意,这比使用
sed
执行要快一点,如果文件已经有9行,那么在shell上就容易多了;)
如果文件包含的行数可能少于9行,甚至可能更大(您仍然希望写入第10行),perl模块将使事情变得非常简单:
#!/usr/bin/perl
use Tie::File;
tie my @file, 'Tie::File', '/path/to/some/file' or die $!;
$file[9] = "I am the content of line 10";
对于sed:
sed '10 s/^/text' file >file.new && mv file.new file
使用gnu时:
sed -i '10 s/^/text' file
使用awk:
awk 'NR==10 {$0="text"} 1' file >filen.new && mv file.new file
将第10行替换为“Foobar”。这可能包含换行符:
sed 4cFoobar"\nFoobar" foo
这与Mikel使用a而不是c的解决方案形成对比。区别在于一个替换,另一个追加。Ruby(1.9+)
谢谢,我可以看到sed看起来更容易。。。是的,在第10行插入,因为第9行和第11行已经有文本。确定。它只适用于Linux、FreeBSD、Mac OS和Cygwin。在Solaris、AIX、HP-UX等平台上,您需要安装GNU-sed,或者将输出重定向到tempfile,然后
mv
itperl-p-i-e…
。这就是我写“使用gnu sed”的原因:@Mikel很抱歉我遇到了问题和错误,所以我重新编辑了。。。谢谢你这么快的回复。
awk 'NR==10 {$0="text"} 1' file >filen.new && mv file.new file
sed 10cFoobar foo
sed 4cFoobar"\nFoobar" foo
$ ruby -i.backup -ne 'print ($.==10)?"word\n":$_' file