在目录中的所有文件中查找字符串

在目录中的所有文件中查找字符串

我想{{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 和findmagic 递归调用之外,某些程序可以为您完成繁琐的工作。

例如,使用 silversearcher-ag (https://geoff.greer.fm/ag/)或确认(https://beyondgrep.com/),就这么简单:

ack '{{text}}'

或者

ag '{{text}}'

这些工具的优点还在于,默认情况下可以避免在二进制文件或目录(例如 等)中搜索,.git并且比循环.svn调用要快得多。grep

这些工具存在于主要 GNU/Linux 发行版的存储库中。

相关内容