使用xargs和grep查找文件中的信息

时间:2013-11-25 19:51:48

标签: bash awk grep xargs

我有其他目录的目录

$ ls
fish dog cow bird sheep

在每个文件夹中我有不同的文件

$ ls cat/
A11 A12 B11 B12 C11 C12 D11 D12

然后我查询每个目标FARM,我得到一个列表,我解析,删除完整路径,只保留相关的根目录,awkcow sheep land ,我想现在查看这些文件夹,看看$ grep -l "FARM" */A1* | awk -F/ '{print $1}' | xargs -0 -I {} grep "LAND" {}/B*2 上的那些文件夹。

cow
sheep
/B*2: File name too long

这不起作用,

{{1}}

1 个答案:

答案 0 :(得分:1)

要使用findgrepxargs(在扩展程序为-print0-0的系统上),您可以使用

find "$path" -type f -print0 | xargs -0 grep -e "$what_to_look_for" /dev/null

-print0中的find-0中的xargs的使用强制使用NUL字符(文件名中不能存在)分隔符,因此带有空格,制表符甚至换行符的文件名也可以使用。 /dev/null确保始终至少有两个参数传递给grep,因此即使find仅查找单个文件,它也会打印与匹配相对应的文件名;如果你保证总是有GNU查找,你可以取出/dev/null并使用-H来达到这个目的。

例如:

find . -print0 | xargs -0 grep -e FARM /dev/null

要使用纯POSIX查找(对于规范的2006版本或更高版本),您还可以通过使用xargs -exec参数来完全避免使用find

find . -exec grep -e FARM /dev/null '{}' +