2

嗨,我正在尝试确保没有任何文件具有

<? 

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

<?PHP

到目前为止,我必须

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

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

我尝试使用转义字符来表示 ? IE。/?遵循以下 URL 上的建议

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

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

有什么建议吗?提前致谢

詹姆士


4

1 回答 1

1

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

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

否则,在您的尝试中,会发生以下情况: <?*扩展的正则表达式匹配 first <,这?使得可选,然后*表示“前面的表达式的零个或多个”。所以实际上,这匹配任何以 开头或不以 开头的<?内容,因此匹配所有内容。

如果您切换到基本模式(不是-E),<?则按字面意思匹配。将其连接到逆向,该逆向-v <?php也与字面匹配以删除那些。

于 2012-07-16T21:46:27.800 回答