Linux find 和 grep 命令一起



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

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... 

有什么想法吗?

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

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

这是解释

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

现在问题更清楚了,你可以在一个 grep 中做到这一点

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).

或者可能更容易

grep -R put **/*bills*

** glob 语法表示"任何深度的目录"。 它将在 Zsh 中工作,我认为 Bash 的最新版本也是如此。

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

相关内容

  • 没有找到相关文章

最新更新