2016-01-19 31 views
0

我想用grep递归一个目录中的所有.txt文件的递归的grep:用管道输入

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

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

从本质上讲,我想这样做,除了file是动态的:

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

我通过64位MINGW外壳使用Windows 7的grep。

+0

如果“-a或--text标志似乎导致所有行匹配”,那么您一定错过了某些内容。如果您有一些示例代码和输入,我们可能会更好地理解问题...... – flederwiesel

回答

1

您可以使用一个循环对所有* .txt文件:

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

会发现名为.TXT文件,并与findThisStr在他们打印出来的文件名。如果您在findThisStr中有特殊字符,您应该转义或引用它们。