使用 grep 仅输出包含模式的文件名(不带行输出)

使用 grep 仅输出包含模式的文件名(不带行输出)

我想列出包含模式的文件,而不输出包含模式的行。我认为可以用 来做到这一点grepgrep在这个意义上我应该如何使用?例如,以下命令给出所有文件中包含“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

相关内容