关于'<! - ?'的MACOS 10.6上的GREP但不是'<?php' - >

时间:2012-07-16 13:41:37

标签: regex grep osx-snow-leopard

您好我正在努力确保没有任何文件

<? 

(PHP短标签),他们确实有

<?PHP

到目前为止,我必须

grep -r -E '<?*' * | grep -Ev '<?php' >> /phptags.txt

所以这应该在我的根文件夹中给我一个名为phptags.txt的空白文件,如果全部的话

我试过使用转义字符?即。 /?遵循以下URL的建议

https://unix.stackexchange.com/questions/10004/what-does-mean-in-a-regular-expression

之前的经验如何在MacOS10.6上显示grep正则表达式不需要?要转义以搜索它作为文字字符串...但它不起作用!

人们有什么建议吗?提前致谢

詹姆斯

1 个答案:

答案 0 :(得分:1)

如果没有-E标记和*通配符,您的'<?'模式将匹配并按预期工作,之后您可以管道反转。建议同时添加-i不区分大小写的标志:

grep -ir '<?' * | grep -iv '<?php' >> /phptags.txt

否则,在您的尝试中,会发生以下情况:<?*因为扩展正则表达式与第一个<匹配,?使其成为可选项,后跟*这意味着“前面的表达式中的零个或多个”。所以实际上,这匹配任何以<?开头或不开头的东西,因此匹配所有内容。

如果您切换到基本模式(不是-E),<?将按字面匹配。将其转换为反-v <?php,也是字面上匹配以删除它们。