带有管道输入的递归grep

时间:2016-01-19 22:23:48

标签: bash unix grep

我正在尝试递归地grep目录中的所有.txt文件:

grep -r --include \*.txt findThisStr .

不幸的是,我正在尝试搜索的.txt文件中包含一些空字符,并且使用-a或--text标志似乎会导致文件中所有行的匹配。为了解决这个问题,我希望清理输入并通过grep(like this)管道输入,但是我不确定如何递归地执行此操作,或者即使它是可能的。

基本上,我想做这样的事情,除了file是动态的:

   cat file | tr -d '\000' | grep -r --include \*.txt findThisStr .

我在Windows 7上通过64位MINGW shell使用grep。

2 个答案:

答案 0 :(得分:1)

您可以在所有* .txt文件上使用循环:

for i in $(find . -name '*.txt'); do
    cat $i | tr -d '\000' | grep findThisStr
done

答案 1 :(得分:0)

find . -name '*.txt' |xargs grep -l findThisStr

将找到名为.txt的文件,并在其中打印出带有findThisStr的文件名。如果你在findThisStr中有特殊字符,你应该转义或引用它们。