现在我正在使用
echo "Hello World" >> file.txt
将一些文本附加到文件中,但我还需要在某个字符串下面添加文本,比如说[option]
,可以吗sed
?
例如:
输入文件
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 选项进行备份并就地编辑输入文件
答案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
$
答案3
和awk
:
awk '1;/PATTERN/{ print "add one line"; print "\\and one more"}' infile
请记住,有些字符不能按字面意思包含,因此必须使用转义序列(它们以反斜杠开头)例如,要打印文字反斜杠,必须编写\\
.
它实际上是相同的,sed
但此外文本中每个嵌入的换行符前面都必须有一个反斜杠:
sed '/PATTERN/a\
add one line\
\\and one more' infile
有关转义序列的更多详细信息,请参阅手册。
另外,为了解决一些评论:上述命令不会就地编辑文件,它们只是将结果打印到标准输出。要实际修改输入文件,您可以使用开关(-i
如果您awk
/sed
支持它)(查阅手册),或者重定向到临时文件,然后覆盖原始文件,例如
cmd infile > outfile
mv outfile infile
或者使用ed
/ex
可以在所有平台上就地编辑文件:
ex -s infile <<\IN
/PATTERN/a
add one line
and one more
.
w
q
IN
请记住:使用//ed
进行追加和插入;用, 插入,将 移至末尾。sed
ex
a
i
awk
1
答案4
这也可以使用该实用程序来实现ed
。它更容易使用sed
,但很高兴熟悉一个附加实用程序(我来到此页面,专门寻找如何使用 ed 实现此目的;我已经知道如何在 sed 中做到这一点)。
对于您的示例文件(打印有行号以供参考):
1 Some text
2 Random
3 [option]
4 Some stuff
实现建议输出的命令ed
是:
4i
*inserted text*
.
w
q
解释:
- 转到第 4 行,启动插入模式 (i)
- 添加*插入文字*(包括换行符)
- 退出插入模式 (.)
- 写入文件 (w) 并退出
ed
(q)
您可以使用一个命令将所有这些放在一起这里的字符串:
ed filename.txt <<< '4i
*inserted text*
.
w
q
'