在bash中,如何查找存在“test”字符串的文件,排除二进制文件

时间:2013-10-31 06:35:30

标签: bash shell awk grep find

find . -type f |xargs grep string |awk -F":" '{print $1}' |uniq

上面的命令,它获取包含字符串“test”的所有文件名。但结果包括 二进制文件。

问题是如何排除二进制文件。

谢谢大家。

2 个答案:

答案 0 :(得分:3)

如果我理解正确,您希望获取目录及其子目录中包含字符串string的所有文件的名称,不包括二进制文件。

阅读grep的友好手册,我能够抓住这个:

-I     Process a binary file as if it did not  contain  matching  data;
       this is equivalent to the --binary-files=without-match option.

惊人!

现在我摆脱find怎么样?只有grep这可能吗?哦,下面两行,仍然在时髦的手册中,我读到了这个:

 -R, -r, --recursive
          Read all  files  under  each  directory,  recursively;  this  is
          equivalent to the -d recurse option.

这看起来很棒,不是吗?

如何只获取文件名?仍在grep的有趣手册中,我读到了:

   -l, --files-with-matches
          Suppress  normal  output;  instead  print the name of each input
          file from which output would normally have  been  printed.   The
          scanning  will  stop  on  the  first match.  (-l is specified by
          POSIX.)

耶!我想我们已经完成了:

grep -IlR 'string' .

<强>说明

  • 我也尝试在手册中找到make me a sandwich,但我的grep版本似乎不支持它。 YMMV。
  • 本手册位于man grep
  • 正如William Pursell正确评论的那样,-R-I开关并非在grep的所有实现中都可用。如果您的grep拥有make me a sandwich选项,则很可能会支持-R-I次切换。 YMMV。

答案 1 :(得分:0)

我使用的Unix版本不支持命令&#34; grep -I / R&#34;。

我尝试了命令:

file `find ./` | grep text | cut -d: -f1 | xargs grep "test"