我有以下 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 -Z
和xargs -0
让文件名由 NUL 字节分隔。 (在 GNU grep 中,就是这样。其他的可能有所不同,例如 FreeBSD grep 则--null
相反。)