我想使用perl one-liner找到并对应阻止和取消注释文本文件中的第二行。我是使用复杂正则表达式的新手,所以非常感谢您的帮助!还有一种调试单行的方法吗?
这是我到目前为止所做的,即使我使用交互式正则表达式测试器测试它也不起作用:
>>> o1 = A()
>>> a is o1 # o1 was most recently instantiated
True
>>> o2 = A()
>>> a is o1 # o1 is no longer the most recently instantiated ...
False
>>> a is o2 # ... o2 is
True
文本文件如下所示
perl -p -i.bak -e 's/#[\s]*label2[\n]#(.*)/${1}/gi;' file.txt
答案 0 :(得分:2)
一个选项:
perl -0777 -pe 's/(#\s*label2\s*\n)#/$1/s' infile
-0777
会覆盖整个文件,parens会在关键行上进行分组,以便在替换部分中再次使用它,并删除它外面的#
字符。它产生:
# label1
#variable=foobar1
# label2
variable=foobar2
关于调试,我认为它与脚本相同,使用-d
开关激活它。只需将每条指令放在不同的行中即可将其可视化。
答案 1 :(得分:-2)
如果你不仅限于perl,那就是一个awk解决方案:
awk 'f{f=sub(/^#/,"")};/label2/{f=1}1' file.txt