![如何使用grep命令来实现这一点?](https://linux22.com/image/143591/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8grep%E5%91%BD%E4%BB%A4%E6%9D%A5%E5%AE%9E%E7%8E%B0%E8%BF%99%E4%B8%80%E7%82%B9%EF%BC%9F%20.png)
我的文件夹中有几个文件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 \;