现在我正在使用
echo "Hello World" >> file.txt

将一些文本附加到文件中,但是我还需要在某个字符串下面添加文本,比如说[option]sed是否可能? br />输入文件
Some text
Random
[option]
Some stuff

输出文件
Some text
Random
[option]
*inserted text*
Some stuff


评论

您必须更加具体,并提供一些示例文本,以帮助人们使用确切的命令。

请编辑您的Q并显示输入和输出行。因为你Q不清楚。您也可以回显“ Hello World [option]” >> file.txt,但这没有任何意义。

我对问题进行了编辑以提供更多信息以供参考,但是可接受的答案是我正在尝试实现的目标

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

#1 楼

比赛后追加行


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

比赛前插入行


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

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

评论


在osx上,我得到sed:1:“ / pattern / a some text here”:命令a期望\,后跟文本

–the_prole
19年1月20日在21:11

@the_proleunix.stackexchange.com/questions/229873/…

–拉胡尔·帕蒂尔(Rahul Patil)
19年1月21日在14:45

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

–汤姆·霍华德
19年8月2日在13:34



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

–kimbaudi
19年8月7日,下午2:50

@kimbaudi我不确定为什么,但是在我的情况下,仅添加0,就在文件中插入行而没有任何明显的模式(类似于stackoverflow.com/q/54382514)

– aexl
20年8月11日在9:37



#2 楼

是的,可以使用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
$


评论


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

– devnull
2014年3月25日19:07在

有没有办法在最新的字符串匹配后添加它?例如:foo bar选项bar选项baz。所以模式变成了foo bar选项bar选项addstring baz吗?

–阿里
15年12月21日在12:45

#3 楼

使用awk

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


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

sed实际上相同,但此外,文本中的每个嵌入换行符都必须加反斜杠:有关转义序列的详细信息,请参阅手册。

评论


awk行实际上并不更改文本,而只是输出。

–约瑟夫·克利穆克(Josef Klimuk)
18年6月17日在14:51