我们可以使用什么unix命令将某些文本附加到文件中的特定行?

时间:2009-03-02 16:16:14

标签: unix file line editing

是否有人知道一系列unix命令,允许某人将某些文本附加到文件中特定行的末尾?

例如

第1行

第2行

第3行

第4行

我希望将文字“,额外信息”附加到第3行,以便文件现在看起来像这样:

第1行

第2行

第3行,额外信息

第4行

6 个答案:

答案 0 :(得分:8)

在awk中:

awk '{s=$0; if( NR==3 ){ s=s ", Extra Information" } print s;}' myfile > newfile

适当的sed版本:

sed -e '3s/$/, Extra Information/' -i myfile

答案 1 :(得分:5)

以下是具有可移植sed(不带-i选项)的版本:

sed '3s/$/Hello World/' myfile

请注意,myfile未被修改,因此您可以从可能的错误中恢复。

答案 2 :(得分:4)

awk 'NR == 3 { print $0 ", extra information" } NR != 3' myfile

大括号前的部分是条件:如果我们在第3行,我们会附加一些文字。如果省略括号,则默认操作是打印出$0。根据需要重定向到新文件或管道到另一个程序。您无法重定向到您刚刚阅读的同一文件。常见的解决方法是重定向到新文件,然后在命令成功时移动:

somecommand > oldfile.tmp && mv oldfile.tmp oldfile

答案 3 :(得分:2)

sed -e "s/^Line 3/\0, extra info/" -i text.txt

答案 4 :(得分:2)

的Perl:

perl -p -e's{\n}{, extra information\n} if $. ==3' myfile

$。是行号

答案 5 :(得分:1)

如果您希望将额外信息仅附加到一行,那么任何sed / awk单行都可以。

如果你想(几乎)在文件中的每一行附加一些内容,你应该创建第二个文件,其中包含每行的额外信息并使用paste

$ cat myfile
line 1
line 2
line 3
line 4
$ cat extra 
something

something else
$ paste myfile extra
line 1  something
line 2
line 3  something else
line 4