我尝试使用 find 与 grep 组合来查找我的 Web 服务器中包含长度超过 50 个字符的单词(空格以外的任意字符序列)的所有 php 文件。
我有这个基础:
find . -name '*.php' -exec fgrep -q '.{50}' {} \; -print
但并没有像预期的那样工作。
谢谢
答案1
我个人egrep
仅使用:
egrep -nor '[^ ]{50,}' .
查看man egrep
以了解前一个命令中发生的情况。
答案2
它没有按预期工作,因为-q
意味着quiet
,它导致grep
不打印任何内容,它仅在测试的存在状态时有用grep
。你想要的更接近:
find . -name '*.php' -exec grep -lP '\w{50,}' {} \;
意思-l
是“打印匹配文件的名称”并-P
激活 perl 兼容的正则表达式,这样我们就可以使用它\w
是匹配单词字符的简写(基本上[a-zA-Z0-9-_]
但细节取决于您的语言环境。使用[^ ]
是一个好主意,但会计算\t
和\r
甚至\n
,以及像~@#$%^&*()
单词和这样奇怪的东西,我假设这不是你想要的。
如果你想搭配任何非空格字符,请改用这个:
find . -name '*.php' -exec grep -lP '\S{50,}' {} \;