我的文件夹中有几个文件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 \;