mtk*_*mtk 14 grep search stdout command-switch
我正在尝试使用grep. 目录中有很多文件(> 500)
$ grep 'delete' *
Run Code Online (Sandbox Code Playgroud)
validate_data_stage1:0
validate_data_stage2:0
validate_data_stage3:0
validate_data_stage4:0
validate_data_stage5:0
validate_input_stage1:0
validate_input_stage2:0
validate_input_stage3:0
validate_input_stage4:0
.... and hundred of such lines
Run Code Online (Sandbox Code Playgroud)
这些是不包含给定匹配项的文件。我想抑制这些行显示到标准输出。我知道-qswitch,但这会抑制我不想要的完整输出。
我怎么做?
Lau*_*scu 14
添加
| grep -v ':0$'
Run Code Online (Sandbox Code Playgroud)
不是很优雅,但我认为可以完成这项工作。
添加-l到您的命令中只会为您提供匹配项,但它也会禁止打印每个文件的匹配项数。
小智 9
使用grep -l您只会获得包含至少一个匹配项的文件。
您是否需要有关文件中有多少匹配项的信息?因为您可以跳过 using -cwhich 用于计算文件中的匹配数。
编辑:就像术士所说的那样,使用-I抑制二进制文件中的匹配也可能是一个好主意。
这就是grep -c.
可能您有一个名称以字符开头-并包含c字符的文件,并且您正在使用 GNU grep 而不设置POSIXLY_CORRECT环境变量。
用:
grep -- delete *
Run Code Online (Sandbox Code Playgroud)
或更好:
grep delete ./*
Run Code Online (Sandbox Code Playgroud)
--标记选项的结尾,以便该文件名不会被视为选项(使用 POSIX grep,它不会,因为非选项delete参数会标记选项的结尾),但它不会解决问题一个名为-. 该grep delete ./*更强劲,但有输出额外的缺点./为匹配的文件(虽然可能被认为是奖金,因为这有助于确定包含换行字符的文件名)。