如何在文件中的某个字符串后插入文本?


69

现在,我正在echo "Hello World" >> file.txt将一些文本附加到文件中,但是我还需要在某个字符串下方添加文本,例如“ [option]”,这可能sed吗?

例如:

输入文件

Some text
Random
[option]
Some stuff

输出文件

Some text
Random
[option]
*inserted text*
Some stuff

1
您必须更加具体,并提供一些示例文本,以帮助人们使用确切的命令。
— 克莱门特2014年

请编辑您的Q并显示input和output。因为你Q不清楚。您也可以这样做echo "Hello World [option]" >> file.txt,但这没有任何意义。

我修改了问题以提供更多信息以供参考,但被接受的答案是我想要完成的工作
— 哈维尔·维拉纽瓦

如果您只想编辑配置文件,这是我发现的最佳解决方案:unix.stackexchange.com/a/78076/20661
— rubo77 '16

Answers:


104

比赛后追加行

  • sed '/\[option\]/a Hello World' input

比赛前插入行

  • sed '/\[option\]/i Hello World' input

此外,您可以使用-i.bkpsed选项进行备份和就地编辑输入文件


2
在osx上,我得到sed: 1: "/pattern/a some text here": command a expects \ followed by text
— the_prole


对于Mac OSX,我需要\ <<NEWLINE>>在该a选项之后添加
— Tom Howard

上面的代码将为每个匹配项添加/插入行。如果只想为第一个匹配项添加/插入行,则可以0,添加以下命令:sed '0,/\[option\]/a Hello World' input或sed '0,/\[option\]/i Hello World' input
— kimbaudi,

33

是的,可能与sed:

sed '/pattern/a some text here' filename

一个例子:

$ cat test
foo
bar
option
baz
$ sed '/option/a insert text here' test
foo
bar
option
insert text here
baz
$

2
@javiervd我不确定您的第一个答案是什么意思?如果您首先回答的时间是真的,那您就错了。您没有仔细观察时间戳!
— devnull 2014年

有没有办法在最新的字符串匹配后添加它?例如:foo bar option bar option baz 。那么模式变成了 foo bar option bar option addedstring baz ?
— 阿里

4

与awk:

awk '1;/PATTERN/{ print "add one line"; print "\\and one more"}' infile

请记住,某些字符不能按字面意义包含在内,因此必须使用转义序列(它们以反斜杠开头),例如打印必须写的文字反斜杠\\。

它实际上是相同的,sed但此外,文本中的每个嵌入换行符都必须前面加上反斜杠:

sed '/PATTERN/a\
add one line\
\\and one more' infile

有关转义序列的更多详细信息,请参阅手册。


awk行实际上并不更改文本,而只是输出。
— 约瑟夫·克利穆克
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.