echo "Hello World" >> file.txt
将一些文本附加到文件中,但是我还需要在某个字符串下面添加文本,比如说
[option]
,sed
是否可能? br />输入文件Some text
Random
[option]
Some stuff
输出文件
Some text
Random
[option]
*inserted text*
Some stuff
#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
评论
您必须更加具体,并提供一些示例文本,以帮助人们使用确切的命令。请编辑您的Q并显示输入和输出行。因为你Q不清楚。您也可以回显“ Hello World [option]” >> file.txt,但这没有任何意义。
我对问题进行了编辑以提供更多信息以供参考,但是可接受的答案是我正在尝试实现的目标
如果您只想编辑配置文件,这是我发现的最佳解决方案:unix.stackexchange.com/a/78076/20661