Linux find和grep命令在一起

时间:2014-02-13 19:37:39

标签: bash grep find

我正在尝试查找命令或创建一个Linux脚本,可以执行这两个命令并列出otuput

find . -name '*bills*' -print

这会打印所有文件

./may/batch_bills_123.log
./april/batch_bills_456.log
..

从这个结果我想做一个单词的grep我现在手动执行此操作

grep 'put' ./may/batch_bill_123.log 

并获取

sftp > put oldnet_1234.lst

我希望得到文件名及其匹配。

./may/batch_bills_123.log   sftp > put oldnet_1234.lst
..
..
and so on... 

任何想法?

4 个答案:

答案 0 :(得分:39)

您正在寻找gnu grep中的-H选项。

find . -name '*bills*' -exec grep -H "put" {} \;

以下是解释

    -H, --with-filename
      Print the filename for each match.

答案 1 :(得分:25)

既然问题更清楚了,你可以在一个

中完成
grep -R --include "*bills*" "put" .

带有相关标志

   -R, -r, --recursive
          Read  all  files  under  each  directory,  recursively;  this is
          equivalent to the -d recurse option.
   --include=GLOB
          Search only files whose base name matches GLOB  (using  wildcard
          matching as described under --exclude).

答案 2 :(得分:1)

也许更容易

grep -R put **/*bills*

** glob语法的意思是“目录的任何深度”。它可以在Zsh中运行,我认为Bash的最新版本也可以。

答案 3 :(得分:0)

grep -l "$SEARCH_TEXT" $(find "$SEARCH_DIR" -name "$TARGET_FILE_NAME")