ELF我使用以下命令在当前目录下的纯文本文件中递归搜索字符串:
grep ELF -r .
Run Code Online (Sandbox Code Playgroud)
但它也搜索二进制文件(例如 zip 文件、PDF 文件)以及 HTML 文件和.js.
如何指定它仅在非源代码的纯文本文件中搜索?
使用 GNU grep,传递--binary-files=without-match忽略二进制文件。源代码文件是文本文件,因此它们将包含在结果中。
如果您想忽略具有某些扩展名的文本文件,您可以使用该--exclude选项,例如
grep -r --exclude=\'*.html\' --exclude=\'*.js\' \xe2\x80\xa6\nRun Code Online (Sandbox Code Playgroud)\n\n或者您可以只包含显式匹配的文件,例如
\n\ngrep -r --include=\'*.txt\' \xe2\x80\xa6\nRun Code Online (Sandbox Code Playgroud)\n\n如果您想忽略属于源代码的文本文件,可以使用该file命令来猜测哪些文件是源代码。这使用启发式方法,因此它可以将源代码检测为非源代码,反之亦然。
find -type f exec sh -c \'\n for x do\n case $(file <"$x") in\n *source*) :;; # looks like source code\n *text*) grep -H -e "$0" "$x";; # looks like text\n # else: looks like binary\n esac\n done\n\' "REGEXP" {} +\nRun Code Online (Sandbox Code Playgroud)\n\n或者
\n\nfind -type f exec sh -c \'\n for x do\n case $(file -i <"$x") in\n text/plain\\;*) grep -H -e "$0" "$x";; # looks like text\n # else: looks like source code or binary\n esac\n done\n\' "REGEXP" {} +\nRun Code Online (Sandbox Code Playgroud)\n\n或者,您可以使用ack代替 grep。Ack 集成了基于文件名的文件分类系统。默认情况下,它适合在源代码中搜索,但您可以通过传递选项告诉它搜索不同类型--type。使用 ack 搜索所有文件可能会有所帮助。