我想递归地在目录下的所有文件中搜索一个单词,并将出现的行输出到目录中的输出文件中。
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