我想列出包含模式的文件,而不输出包含模式的行。我认为可以用 来做到这一点grep
。grep
在这个意义上我应该如何使用?例如,以下命令给出所有文件中包含“stringpattern”(不区分大小写)的所有行.txt
。我只想知道文件名(±行号)。
grep -ni stringpattern *.txt
理想情况下,如果字符串/模式在一个文件中多次出现,我希望该文件有多行输出。
答案1
如果您只需要匹配的文件:
grep -lie pattern -- *.txt
我认为您不能仅使用 grep 来仅打印文件和行号,因为使用 option -n
,它会在每一行“file:line:match”上输出。如果文件名不包含:
也不包含换行符,您可以通过管道将其传递到cut
仅获取您想要的内容。
grep -nie pattern -- /dev/null *.txt | cut -d: -f 1,2
/dev/null
如果*.txt
仅扩展为一个文件名,则需要此选项grep
,否则将不会打印文件名。使用 或 兼容的 GNU 实现grep
,您可以使用-H
/--with-filename
代替以确保始终打印文件名。
答案2
awk '/pattern/{print FILENAME}' *.txt