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


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并显示inputoutput。因为你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' inputsed '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.