根据整个文件的内容而不是按行查找文件

根据整个文件的内容而不是按行查找文件

我可以使用与整个文件匹配的 rexexp 来搜索文件吗?假设我有这些文件:

//file1
foo
bar

//file2
bar
foo

我想查找以“foo”结尾的文件。如果我使用grep正则表达式foo$,它将匹配两个文件,因为它们都有以“foo”结尾的行。但我只想匹配第二个文件,因为这是整个文件以“foo”结尾的唯一情况。

答案1

tail您可以使用和的组合,grep例如

find . -type f -exec sh -c 'tail -n1 "$1" | grep -q "foo"' sh {} \; -print

答案2

在 perl 中,0可以使用选项将文件作为单个记录进行处理。

用这种方法尝试:

perl -n0E  'say $ARGV if /foo\s*$/' file*

\s*有助于处理通常出现在文件末尾的新行和类似内容。

另一个类似的替代方案(gnugrep)

grep -lzP 'foo\Z' file*

相关内容