当重定向文件存在时使用有限递归的 grep

当重定向文件存在时使用有限递归的 grep

我想递归地在目录下的所有文件中搜索一个单词,并将出现的行输出到目录中的输出文件中。

grep -ri "my_str" ./ >> opt_file.txt

但是,由于“my_str”也出现在 opt_file.txt 中,因此 opt_file.txt 中的出现也会在重定向文件中递归列出,从而形成无限循环。有没有简单的方法可以解决这个问题?

答案1

man grep

--exclude=GLOB
      Skip  files  whose  base  name  matches  GLOB  (using   wildcard
      matching).   A  file-name  glob  can  use  *,  ?,  and [...]  as
      wildcards, and \ to quote  a  wildcard  or  backslash  character
      literally.

所以:

grep -ri "my_str" ./ >> opt_file.txt --exclude=opt_file.txt

尽管我只是将文件保存在其他地方,以避免在子目录中也存在类似文件的复杂情况:

grep -ri "my_str" ./ >> ../opt_file.txt
grep -ri "my_str" ./ >> /tmp/opt_file.txt

相关内容