Bash - ack - 限制匹配线的长度

时间:2012-05-13 02:06:48

标签: bash limit ack args

有没有办法限制ack匹配的行的长度?如果ack匹配,例如,缩小的javascript文件,它打印出的行可能非常大。我仍然希望它能够显示突出显示的匹配,但最好是在与elipses匹配之前和之后切换线:"... stuff match stuff ..."。在the ack docs中没有看到任何结论。

我尝试用类似

的东西挖掘它
ack pattern | awk '{print substr($0,1,200) }'

awk似乎正在剥离着色和格式化,这是不受欢迎的。我也试过(忍受我一秒钟):

ack pattern | ack pattern

看看我是否可以重新确认每一行并将其删除或其他内容,但这具有相同的格式问题。管道确认输出显然会删除换行符?

根据评论编辑:

也许这有助于解释我想要这个的主要原因。我用ack.vim搜索我的项目。我经常想通过我的javascript文件找到一个单词,比如“cookie”。我们在代码中对jQuery和其他缩小库进行了版本化,因此它们显示在ack结果中。由于这些文件是缩小的,因此很少有换行符,并且它在分割窗口中显示了一条巨大的线,我必须滚动过去。我几乎从不关心那场比赛,所以占用这么多空间很烦人。我可以将这些缩小的文件名添加到我的ackrc中以忽略但我不希望每次添加缩小的库时都不必添加新的文件名。 ack.vim repo上有an open issue。我想知道是否可以纯粹通过bash-fu来做。

3 个答案:

答案 0 :(得分:3)

你可以:

  • 使用-o选项Show only the part of a line matching PATTERN
  • 使用-l选项Only print filenames containing matches

答案 1 :(得分:2)

如果你真正想要的是忽略缩小的Javascript文件,那么升级你的ack。 ack 1.96及更高版本忽略了缩小的JavaScript文件。

答案 2 :(得分:1)

ack在传输时巧妙地禁用了颜色,但您可以使用--color覆盖它:

ack --color foo | cut -c1-80 | sed "s/$/\e[0;30m/"

(最后一个管道是重置颜色,以防在选择中间切割文本)

格式化有类似选项(--heading--break)。