2012-05-13 61 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)。