我有一个文本文件的文件夹树,我想找到子字符串的实例以及它们来自的文件的名称。
如果我做这样的事情:
find . | xargs cat | grep 'abc'
Run Code Online (Sandbox Code Playgroud)
然后我会找到子字符串的实例,而不是它们最初来自的文件。
谢谢您的帮助!
xargs cat
像这样运行会丢失文件名,并且没有好的方法可以在数据流过的同时将它们通过管道。
但是grep -l
列出具有匹配字符串的文件名,因此您可以使用它:
find . -type f | xargs grep -l hello
Run Code Online (Sandbox Code Playgroud)
或者只是grep -r
递归地遍历目录,还可以解决xargs
包含空格或引号的文件名的问题:
grep -lre abc .
Run Code Online (Sandbox Code Playgroud)
如果您也想要匹配的字符串,而不仅仅是文件名,请删除-l
以获得通常的grep
行为。使用-r
,它也应该打印匹配的文件名,即使我们只在命令行上给出一个路径。
xargs
是多余的。当您这样做时xargs cat | grep
,grep
只会看到一个无名的输入流,其中包含所有文件的串联内容。改为:
find . -type f -exec grep -H 'abc' {} +
Run Code Online (Sandbox Code Playgroud)
这将调用grep
每个文件(并grep
通过调用grep
多个文件作为参数来最小化 的实例数)。
归档时间: |
|
查看次数: |
735 次 |
最近记录: |