参考链接:如何在文件中的某个字符串后插入文本? 我有这个输入文件:
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”。仅当第一个条件满足时才评估第二个条件。因此,在这种情况下,仅当发生匹配时,变量的值才会递增并进行比较。