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

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

现在我正在使用

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进行追加和插入;用, 插入,将 移至末尾。sedexaiawk1

答案4

这也可以使用该实用程序来实现ed。它更容易使用sed,但很高兴熟悉一个附加实用程序(我来到此页面,专门寻找如何使用 ed 实现此目的;我已经知道如何在 sed 中做到这一点)。

对于您的示例文件(打印有行号以供参考):

 1  Some text
 2  Random
 3  [option]
 4  Some stuff

实现建议输出的命令ed是:

4i
*inserted text*
.
w
q

解释:

  1. 转到第 4 行,启动插入模式 (i)
  2. 添加*插入文字*(包括换行符)
  3. 退出插入模式 (.)
  4. 写入文件 (w) 并退出ed(q)

您可以使用一个命令将所有这些放在一起这里的字符串:

ed filename.txt <<< '4i
*inserted text*
.
w
q
'

相关内容