grep 不匹配和匹配

grep 不匹配和匹配

我有以下 grep

grep -r --color -L "class public interface" * | grep "authenticate"

我希望它带回文件中任何地方不包含“类公共接口”但包含“身份验证”的文件。

但我所拥有的并没有按预期工作。我知道应该出现一个文件,因为它不包含“类公共接口”,但包含“身份验证”

我的命令有问题吗?

答案1

正如-L搜索不匹配的文件内容一样,-l搜索具有匹配的文件内容。

因此,您需要-l在第二个“grepping”中指定标志。

此外,您需要将第一个的输出grep作为命令行参数定向到第二个。这可以使用 来完成xargs,这是一个从标准输入读取项目的工具。直接通过管道传输文件名将使第二个 grep 查找authenticate文件中的字符串名字

所以你应该得到类似的东西

grep -r --color -L "class public interface" * | xargs grep -l "authenticate"`

请注意,xargs默认情况下会在任何空格上分割输入,因此如果您的文件名带有空格(或更糟),则需要使用grep -Zxargs -0让文件名由 NUL 字节分隔。 (在 GNU grep 中,就是这样。其他的可能有所不同,例如 FreeBSD grep 则--null相反。)

相关内容