2012-05-13 59 views
2

有没有办法限制ack匹配行的长度?如果ack匹配(例如,缩小的JavaScript文件),则它打印的行可能非常大。我仍然希望它显示突出显示的匹配,但理想情况下与匹配elipses前后的线条匹配:"... stuff match stuff ..."。在the ack docs没有看到任何结论。Bash-ack - 匹配行的限制长度

我试图挖掘到它的东西,如

ack pattern | awk '{print substr($0,1,200) }' 

awk似乎被剥离着色和格式化,这是不需要的。我也试过(包涵了第二):

ack pattern | ack pattern 

,看看我是否可以重新发送对各条线和砍它或东西,但有相同的格式问题。管道确认输出显然删除了换行符?基于评论

编辑:

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

+1

这将有助于了解您匹配的模式以及JavaScript文件的相关部分是什么样的......我怀疑您将会有更多的运气进行模式匹配,而不是采取固定宽度子字符串。 –

+0

我添加了一个编辑 –

回答

3

您可以:

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

嗯,这两个都不是很有帮助,我仍然希望看到围绕匹配的上下文 –

+5

将您的模式修改为'-o'。{0,24}模式。{0,24}''其中' 24'是你想要的上下文的长度,* pattern *是你的原始模式。你可以将它嵌入到脚本中。 – tripleee

+0

啊,我明白了。接近我想要的。我会看看是否可以修改vim脚本以在事实 –

2

如果你真正想要的是忽略精缩JavaScript文件,然后升级你的ACK。 ack 1.96及更高版本会忽略缩小的JavaScript文件。

1

ACK巧妙地禁用的颜色,当被管道,但是你可以重写与--color

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

(最后管的情况下,文本重置颜色在选择的中间切开)

也有类似的格式选项(--heading,--break)。