如何使用grep命令来实现这一点?

如何使用grep命令来实现这一点?

我的文件夹中有几个文件file_1, file_2, ..,有些文件包含模式pattern_abc

如何创建一个 new_file ,其中包含具有该模式的所有文件中的行pattern_abc

答案1

pattern_abc要仅从中的所有文件中选择匹配的行dir,请使用

$ grep -h 'pattern_abc' dir/* > new_file

-h标志将导致grep不将文件名与匹配行一起输出。

答案2

您可以尝试递归 grep,

grep -r pattern directory > new_file
  • -r递归读取每个目录下的所有文件。

答案3

使用 GNU grep

grep -lZ pattern_abc folder/file_* | xargs -r0 cat > new_file

(如果使用zsh,您可以替换file_*file_*(.)只考虑常规的文件,或file_*(.n)对文件列表进行排序数字上(所以file_9来了 file_10例如)。

或者递归地只考虑常规的文件:

find folder -name 'file_*' -type f -exec grep -lZ pattern_abc {} +|
  xargs -r0 cat > new_file

但请注意,文件列表未排序,因此文件将以某种随机顺序连接。

在找到的每个文件夹中按zsh数字对文件进行排序:

grep -lZ pattern_abc folder/**/file_*(Dn.) | xargs -r0 cat > new_file

D也可以像那样查看隐藏目录find)。

答案4

这将找到包含匹配行的文件pattern_abc,并完整输出其内容(而不仅仅是匹配行)。

grep -q,一旦找到第一个匹配模式就停止并find处理下一个文件。

find . -type f -execdir grep -q 'pattern_abc' {} \; -exec cat {} >> /path/to/outfile \;

相关内容