查找字符数超过 50 个的单词

查找字符数超过 50 个的单词

我尝试使用 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,}' {} \;

相关内容