【发布时间】:2015-06-02 17:41:35
【问题描述】:
我在一个目录中有几个文件,其中两个分隔符之间有一段文本。
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"`
【问题讨论】:
-
您没有收到此错误:
The filename, directory name, or volume label syntax is incorrect.? -
perl -ne 'print unless m|//###==###| ... m|//###==###|' -
@RobEarl 的评论应该是一个答案。这就是范围运算符的使用方式。