1

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

例如

1号线

2号线

3号线

4号线

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

1号线

2号线

第 3 行,额外信息

4号线

4

6 回答 6

8

在 awk 中是:

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

正确的 sed 版本:

sed -e '3s/$/, Extra Information/' -i myfile
于 2009-03-02T16:25:38.623 回答
5

这是一个可移植的版本sed(没有 -i 选项):

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

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

于 2009-03-02T16:20:19.010 回答
4
awk 'NR == 3 { print $0 ", extra information" } NR != 3' myfile

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

somecommand > oldfile.tmp && mv oldfile.tmp oldfile
于 2009-03-02T16:26:34.720 回答
2
sed -e "s/^Line 3/\0, extra info/" -i text.txt
于 2009-03-02T16:23:01.700 回答
2

珀尔:

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

美元。是行号

于 2009-03-02T16:32:15.500 回答
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
于 2009-03-02T17:09:20.310 回答