从 grep 输出中排除具有很长文本行的文件

Mar*_*ron 23 grep

我经常运行 grep 命令来查找我的代码中的内容,但是 Web 项目的问题是通常会有压缩的 JavaScript 和 CSS 文件创建一大行文本,因此如果找到匹配项,则整个终端窗口都是填充了超过 1000 行,这使得找到我正在寻找的内容非常不切实际。

那么有没有办法避免使用超过 200 个字符的单行文本的文件?

Sté*_*las 23

使用 GNU grep 和 xargs:

grep -rLZE '.{200}' . | xargs -r0 grep pattern
Run Code Online (Sandbox Code Playgroud)

或者,您可以减少 grep 的输出:

grep -r pattern . | cut -c1-"$COLUMNS"
Run Code Online (Sandbox Code Playgroud)

或者告诉您的终端不要换行,如果它支持的话:

tput rmam
grep -r pattern .
Run Code Online (Sandbox Code Playgroud)

或使用 less -S

grep -r pattern . | less -S
Run Code Online (Sandbox Code Playgroud)

  • 使用第一个示例中的正则表达式,通过反向匹配将管道输入 grep,`... | grep -v -E '.{200}'` 也可以。例如,查找当前目录下所有带有“.name”且不超过 200 个字符的 *.js 文件行:`find 。-name "*.js" -exec grep -H \\.name {} \; | grep -v -E '.{200}'` (3认同)

aul*_*ron 5

选项 1: 您可以排除匹配特定模式的文件:

grep --exclude='*.min.*'
Run Code Online (Sandbox Code Playgroud)

这将排除script.min.jsstyle.min.css...其他grep选项包括--exclude-from=FILE--exclude-dir=DIR

选项 2: 我不确定这是否实用,但是您可以cut每行的前 200 个字符,然后是grep它们:

grep -H [OPTIONS] PATTERN [FILE...] | cut -c1-200 | grep PATTERN
Run Code Online (Sandbox Code Playgroud)

grep一个进行初始匹配并输出文件名和行,第二个确保在调整行PATTERN后仍然存在cut