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

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

参考链接:如何在文件中的某个字符串后插入文本? 我有这个输入文件:

Some text
Random
[option]
Some stuff

我想要在“[选项]”之前有一行文本:

Some text
Random
Hello World
[option]
Some stuff

这个命令:

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

有效,
但是这个命令:

perl -pe '/\[option\]/i Hello World' input

不起作用。
等效的 perl 命令是什么?

更新:

感谢@terdon 和@Sundeep,我找到了这个部分解决方案:

perl -lpe 'print "Hello World" if /^\[option\]$/' input

但我只想在第一次遇到“[option]”时插入文本字符串,而不是每次都插入。
例如:

Some text
Random
[option]
Some stuff
test1
[option]
test2

变得:

Some text
Random
Hello World
[option]
Some stuff
test1
Hello World
[option]
test2

并不是:

Some text
Random
Hello World
[option]
Some stuff
test1
[option]
test2

如我所愿。

答案1

这是一种 perl 方法:

$ perl -ne 'if(/\[option\]/){print "*inserted text*\n"}; print' input
Some text
Random
*inserted text*
[option]
Some stuff

这是另一个更简洁的:

 $ perl -ne '/\[option\]/?print "*inserted text*\n$_":print' input
Some text
Random
*inserted text*
[option]
Some stuff

这需要您将整个文件读入内存:

$ perl -0777 -pe 's/\[option\]/*inserted text*\n$&/' input 
Some text
Random
*inserted text*
[option]
Some stuff

答案2

谢谢@terdon 和@Sundeep!这是我正在寻找的表格:

perl -lpe 'print "Hello World" if /^\[option\]$/' input

更新:

我只想在第一次遇到“[option]”时插入文本字符串,而不是每次都插入。
我已经找到了解决方案:

perl -lpe 'print "Hello World" if /^\[option\]$/ && ++$i == 1' input

要附加文本,我可以使用以下命令:

perl -lpe '$_ .= "\nHello World" if /^\[option\]$/ && ++$i == 1' input

&& 是 if 的与,而“++”或“--”表示加或减 1。由于变量 i(可以是任何其他变量)默认从 0 开始,并且增量采用前缀表示法,这意味着变量先递增,然后进行第一次比较。这种语法使得命令非常有弹性,而且比我想象的更强大。 “&&”的优先级高于“and”。仅当第一个条件满足时才评估第二个条件。因此,在这种情况下,仅当发生匹配时,变量的值才会递增并进行比较。

相关内容