4

有没有办法限制ack匹配的行的长度?如果 ack 匹配,例如,一个缩小的 javascript 文件,它打印出来的行可能非常大。我仍然希望它显示突出显示的匹配,但理想情况下,在匹配之前和之后使用省略号:"... stuff match stuff ...". 在ack 文档中没有看到任何结论性的内容。

我试着用类似的东西来挖掘它

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

awk似乎正在剥离颜色和格式,这是不受欢迎的。我也尝试过(请耐心等待):

ack pattern | ack pattern

看看我是否可以重新确认每一行并将其切碎或其他东西,但这有同样的格式问题。管道 ack 输出明显消除了换行符?

根据评论编辑:

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

4

3 回答 3

4

你可以:

  • 使用-o选项Show only the part of a line matching PATTERN
  • 使用-l选项Only print filenames containing matches
于 2012-05-14T00:23:08.167 回答
2

如果您真正想要的是忽略缩小的 Javascript 文件,请升级您的 ack。ack 1.96 及更高版本会忽略缩小的 JavaScript 文件。

于 2012-06-05T17:16:43.270 回答
2

ack 在管道传输时巧妙地禁用颜色,但您可以使用以下命令覆盖它--color

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

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

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

于 2012-09-25T07:31:55.310 回答