0

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

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

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

谢谢大家。

4

2 回答 2

3

如果我理解正确,您想获取目录中所有文件的名称及其包含 string 的子目录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。
于 2013-10-31T06:54:31.197 回答
0

我使用的 Unix 版本不支持命令“grep -I/R”。

我尝试了命令:

file `find ./` | grep text | cut -d: -f1 | xargs grep "test"
于 2014-07-13T07:12:31.550 回答