我需要一个脚本,可以将文本写入从第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 "/etc/bind/db.$zone";
14 };
15 k
16 l
17 m
先谢谢, 乔
答案 0 :(得分:8)
使用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
请注意,我不确定您是指在第10行或第11行插入,因此请仔细检查我在上面写的10
位置。对9
命令,您可能需要sed
,11
版本可能需要bash
。
在perl
中,您可以使用$NR
变量。
open FILEHANDLE, "<file";
while (<FILEHANDLE>) {
if ($NR == 10) {
# do something
}
}
在awk
中,它是NR
。
awk 'NR != 10 { print }
NR == 10 { print "Something else" }' file
但请注意,您可以找到并替换空行,例如
sed -i -e 's/^$/replacement text/' file
答案 1 :(得分:2)
你可以这样做:
head -10 fileA > fileB; echo "new text" >> fileB;
请注意,这比使用sed
答案 2 :(得分:2)
使用sed:
sed '10 s/^/text' file >file.new && mv file.new file
使用gnu-sed:
sed -i '10 s/^/text' file
使用awk:
awk 'NR==10 {$0="text"} 1' file >filen.new && mv file.new file
答案 3 :(得分:1)
sed 10cFoobar foo
用“Foobar”替换第10行。这可能包含换行符:
sed 4cFoobar"\nFoobar" foo
这与使用a而不是c的Mikel的解决方案形成对比。区别在于一个人替换,另一个人补充。
答案 4 :(得分:0)
如果文件已经有9行,那么shell就很容易了;)
$ echo "I am line 10" >> file-with-9-lines.txt
如果文件可能包含少于9行甚至可能更大(并且您仍想写入第10行),则perl模块Tie::File将使事情变得简单:
#!/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";
答案 5 :(得分:0)
Ruby(1.9 +)
$ ruby -i.backup -ne 'print ($.==10)?"word\n":$_' file