我在目录中有几个文件,其中我在两个分隔符之间有一段文字。
Text to keep
//###==###
Text to remove
//###==###
Text to keep
经过广泛搜索后,我找到了以下Mac OS X终端命令,我可以用它来删除分隔符。
perl -pi -w -e 's|//###==###||g' `find . -type f`
但是,我需要一些正则表达式,它不仅可以删除分隔符本身,还可以删除它们之间的内容。像这样的东西,虽然这条线没有做任何事情。
perl -pi -w -e 's|//###==###(.*)//###==###||g' `find . -type f`
重复标记后编辑
我使用标量范围运算符看到了类似here的类似内容,但我不能让它对我有效。尝试失败包括:
perl -pi -w -e 's|//###==###..//###==###||g' `find . -type f`
perl -pi -w -e 's|//###==###(..)//###==###||g' `find . -type f`
perl -pi -w -e 's|//###==###[..]//###==###||g' `find . -type f`
解
在下面的dawg的帮助下,以下oneliner将完全符合我的要求:
$ perl -0777 -p -i -e 's/(^\s*^\/\/###==###.*?\/\/###==###\s*)//gms' `find . -type f -name "index.php"`
答案 0 :(得分:2)
您可以使用:
s/(^\s*^\/\/###==###.*?\/\/###==###\s*)//gms
然后在终端和Perl中。给出:
$ echo "$tgt"
Text to keep
//###==###
Text to remove
//###==###
Text to keep
使用-0777
命令标记来覆盖整个文件,然后:
$ echo "$tgt" | perl -0777 -ple 's/(^\s*^\/\/###==###.*?\/\/###==###\s*)//gms'
Text to keep
Text to keep
或者,您可以使用范围运算符。如果以这种方式完成,则无法删除前导和尾随空白行,如果这是您的意图:
$ echo "$tgt" | perl -lne 'print unless (/\/\/###==###/ ... /\/\/###==###/)'
Text to keep
Text to keep