Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex Perl多行搜索替换_Regex_Perl - Fatal编程技术网

Regex Perl多行搜索替换

Regex Perl多行搜索替换,regex,perl,Regex,Perl,我想使用perl one liner查找和相应的块并取消注释文本文件中的第二行。我对使用复杂的正则表达式相当陌生,因此非常感谢您的帮助!还有一种方法可以调试一行程序吗 以下是我到目前为止所拥有的,即使我使用交互式regex测试仪进行了测试,但仍然不起作用: perl -p -i.bak -e 's/#[\s]*label2[\n]#(.*)/${1}/gi;' file.txt 文本文件如下所示 # label1 #variable=foobar1 # label2 #variabl

我想使用perl one liner查找和相应的块并取消注释文本文件中的第二行。我对使用复杂的正则表达式相当陌生,因此非常感谢您的帮助!还有一种方法可以调试一行程序吗

以下是我到目前为止所拥有的,即使我使用交互式regex测试仪进行了测试,但仍然不起作用:

perl -p -i.bak -e 's/#[\s]*label2[\n]#(.*)/${1}/gi;' file.txt
文本文件如下所示

#   label1
#variable=foobar1

#   label2
#variable=foobar2
一种选择:

perl -0777 -pe 's/(#\s*label2\s*\n)#/$1/s' infile
-0777
将整个文件拖入,parens在关键行上进行分组,以便在替换零件中再次使用它,并删除其外部的字符
#
。它产生:

#   label1
#variable=foobar1

#   label2
variable=foobar2

关于调试,我认为它的工作原理与在脚本中使用
-d
开关来激活它的工作原理相同。只需将每条指令放在不同的行中,即可将其可视化。

一个awk解决方案(如果您不限于perl):

awk 'f{f=sub(/^#/,"")};/label2/{f=1}1' file.txt

/s
修饰符更改了
的行为方式,但在regex.BTW中没有
,我从中获得了一些关于-0777标志的文档/信息?@user1940015 Run(我已链接到在线版本,以防您的机器上没有
perldoc
。@ThisSuitesBlack不谢谢!谢谢,但我的案例仅限于使用perl