我有以下 grep
grep -r --color -L "class public interface" * | grep "authenticate"
Run Code Online (Sandbox Code Playgroud)
我希望它带回文件中任何地方都不包含“类公共接口”但包含“身份验证”的文件。
但是我没有按预期工作。我知道应该出现一个文件,因为它不包含“类公共接口”但包含“身份验证”
我的命令有问题吗?
就像-L
搜索没有匹配-l
项的文件内容一样,搜索具有匹配项的文件内容。
因此,您需要-l
在第二个“grepping”中指定标志。
此外,您需要将第一个的输出grep
作为命令行参数定向到第二个。这可以使用 来完成xargs
,它是一个从标准输入读取项目的工具。直接管道文件名将使第二个 grep 查找authenticate
文件名中的字符串。
所以你应该得到类似的结果
grep -r --color -L "class public interface" * | xargs grep -l "authenticate"`
Run Code Online (Sandbox Code Playgroud)
请注意,xargs
默认情况下将输入拆分为任何空格,因此如果您的文件名带有空格(或更糟),您将需要使用grep -Z
并使用xargs -0
NUL 字节分隔文件名。(也就是说,在 GNU grep 中。其他的可能不同,例如 FreeBSD grep 有--null
。)