![当重定向文件存在时使用有限递归的 grep](https://linux22.com/image/874958/%E5%BD%93%E9%87%8D%E5%AE%9A%E5%90%91%E6%96%87%E4%BB%B6%E5%AD%98%E5%9C%A8%E6%97%B6%E4%BD%BF%E7%94%A8%E6%9C%89%E9%99%90%E9%80%92%E5%BD%92%E7%9A%84%20grep.png)
我想递归地在目录下的所有文件中搜索一个单词,并将出现的行输出到目录中的输出文件中。
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