![在目录中的所有文件中查找字符串](https://linux22.com/image/135937/%E5%9C%A8%E7%9B%AE%E5%BD%95%E4%B8%AD%E7%9A%84%E6%89%80%E6%9C%89%E6%96%87%E4%BB%B6%E4%B8%AD%E6%9F%A5%E6%89%BE%E5%AD%97%E7%AC%A6%E4%B8%B2.png)
我想{{text}}
在所有文件中找到并在新文件中找到红色。我已经尝试过,但它对我不起作用
find . -type f -not -name "*.dll" -not -name "*.zip" -exec cat {} \; |
grep "\{.*" | cut -d "{" -f1 | sort | uniq > keys.txt
答案1
我想你正在寻找这个:
grep -FIrho '{{text}}' . >/tmp/keys.txt
mv -f /tmp/keys.txt .
或者,如果您确实需要排除.dll
和.zip
文件,则可能是这样:
find . \( -name '*.zip -o -name '*.dll' \) -prune -o -type f -exec grep -Fho '{{text}}' {} + >/tmp/keys.txt
mv -f /tmp/keys.txt .
请注意,keys.txt
最终将包含零行或多行{{text}}
.您是否打算要求记录文件名而不是匹配的内容?或者也许整条线都{{text}}
存在?
答案2
除了grep
通过 shell 和find
magic 递归调用之外,某些程序可以为您完成繁琐的工作。
例如,使用 silversearcher-ag (https://geoff.greer.fm/ag/)或确认(https://beyondgrep.com/),就这么简单:
ack '{{text}}'
或者
ag '{{text}}'
这些工具的优点还在于,默认情况下可以避免在二进制文件或目录(例如 等)中搜索,.git
并且比循环.svn
调用要快得多。grep
这些工具存在于主要 GNU/Linux 发行版的存储库中。