从 grep 结果中排除长行

从 grep 结果中排除长行

如何从grep结果中排除很长的行?

我经常 grep 大量 .js 文件 ( -r),其中一些文件经过编译,因此它们通常只有一行,长度只有几千个字符。从所有这些杂乱无章的文件里,我发现很难看到其余文件的结果。

我应该传递什么grep来排除长度超过 1000 个字符的行?

我不希望通过另一个 grep 来传输结果,因为那样会使我丢失输出的颜色,或者不得不再次在管道末尾添加第一个 grep 来恢复颜色。

答案1

通过管道将 连接grep到某个对象并不一定会消除颜色。这种行为是由于--color=auto(如果您检查的话,alias grep可能就是您正在使用的)。您可以覆盖它并传递--color=alwaysgrep即使通过管道,颜色也会保留下来。

至于排除行,您可以通过管道连接到任何您喜欢的工具(例如cutAmazed 提到的)。请记住,如果您在意的话,grep 的颜色会在匹配的行中插入额外的字节。没有明显的方法(至少对我来说)在同一次grep调用中执行此操作。

答案2

以下命令应该可以实现你想要的效果,即不输出长度大于 1000 个字符的匹配行:

grep -r --color=always $pattern . | cut -c1-1000

--color=always标志确保 grep 将生成颜色转义序列。

此选项的默认值为--color=auto,仅当将 grep 传递到交互式终端时,它才会为其输出着色,而当它通过管道传递到另一个命令时,则不使用颜色。

来源:https://unix.stackexchange.com/a/113507/48906

相关内容