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


18

我经常运行grep命令来查找代码中的内容,但是Web项目的问题是,经常会有压缩的JavaScript和CSS文件创建一行巨大的文本,因此,如果找到匹配项,则整个终端窗口将填充了超过1000行,因此很难找到我要的内容。

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

Answers:


20

使用GNU grep和xargs:

grep -rLZE '.{200}' . | xargs -r0 grep pattern

或者,您可以剪切grep的输出:

grep -r pattern . | cut -c1-"$COLUMNS"

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

tput rmam
grep -r pattern .

或使用 less -S

grep -r pattern . | less -S

3
使用第一个示例中的regex,使用invert match,将管道输送到grep ... | grep -v -E '.{200}'也是有效的。例如,在* .js文件的当前目录下查找所有长度不超过200个字符的* .js文件: find . -name "*.js" -exec grep -H \\.name {} \; | grep -v -E '.{200}'
Gary S. Weaver 2015年

3

选项1: 您可以排除符合特定格式的文件:

grep --exclude='*.min.*'

这将排除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

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


2

在这种情况下,我想使用邻居上下文(让我们说30个字符)来grep一个模式:

grep -Po '.{0,30}pattern.{0,30}' *.js
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.