ack 比 grep 好

我想向您介紹一款可以極大簡化生活的搜尋實用程式。 當我到達伺服器並且需要查找某些內容時,我做的第一件事是檢查是否安裝了 ack。 該實用程式是 grep 的絕佳替代品,在某種程度上也是 find 和 wc 的替代品。 為什麼不使用 grep 呢? Ack 具有更好的開箱即用設定、更多人類可讀的選項、perl 正規表示式和配置系統。 如果您喜歡(必須)透過終端進行搜索,那麼您一定要嘗試一下。

基本特點

Ack 預設是遞歸的,寫更少的選項總是一個好主意。

我們可以使用一個標誌 -w告訴實用程式尋找由單字邊界(空格、斜線等)包圍的模式實例。

ack -w mysql

ack 比 grep 好

Ack支援按文件類型搜尋。 例如,讓我們在 json 檔案中尋找模組版本。

ack --json '"version":s+"d+.d+.d+"'

ack 比 grep 好

可以使用以下命令查看支援的文件類型的完整清單:

ack --help-types

例如,您通常需要計算某個短語在日誌檔案中出現的次數,以了解腳本處理了多少資料。

ack 比 grep 好
我們計算 test.log 檔案中進程發生的次數,不考慮大小寫(-i).

我們不僅可以計算一個特定文件中的出現次數,還可以計算一組中的出現次數。 我們來結束之前對mysql這個單字的搜尋:統計單字出現的次數(-with) 在 *.js 檔案中(--js),排除未找到任何內容的文件(-h)並總結結果。

# выведем на экран все вхождения
ack --js -w mysql
# считаем общую сумму вхождений
ack --js -wch mysql

ack 比 grep 好

此外,我們可以使用 (-l)

ack --js -w -cl mysql

ack 比 grep 好

如果您需要額外的搜尋上下文,您可以詢問 ack
顯示最多行 (-B) 之後 (-A) 找到的表達式。 為此,您需要在選項後面指定需要顯示的行數。

# 2 строки до 
ack --js --column -B 2 "query.once('" ./lib/

ack 比 grep 好

# 2 строки после 
ack --js --column -A 2 "query.once('" . /lib/

ack 比 grep 好

如果您兩者都需要,請使用 (-和)

ack --js --column -C 2 "query.once('" ./lib/

還有一個選項(-v) 反轉搜索,即顯示不包含給定模式的行。

正規表示式

Ack 與 grep 不同,使用 Perl 相容表達式。
對我來說這是一個很大的優點;我不必記住正規表示式的單獨語法。

ack 'vars+adds+'

ack 比 grep 好

更複雜的例子

ack '*s+[vd+.d+.d+]'

ack 比 grep 好

通常,您只想在結果中保留與範本相符的內容。 --output 選項在這裡會有幫助(-o)

ack -o '*s+[vd+.d+.d+]'

ack 比 grep 好

此外,使用括號,我們可以選擇找到的部分並透過 $[group number] 變數在輸出中存取它。 例如,

ack --output='version is $1' '*s+[v(d+.d+.d+)]'

ack 比 grep 好

Ack 有有用的選項 --範圍開始 и --範圍結束。 他們在什麼時候提供幫助
資料不是以一行的形式存儲,而是以多行的形式存儲。

例如有一個帶有sql程式碼的文件

ack 比 grep 好

讓我們提取列名稱。 區塊的開頭是以 SELECT 開頭的行,結尾是以 FROM 開頭的行。

ack --range-start ^SELECT --range-end ^FROM 'td+.' ./test.sql

ack 比 grep 好

如果搜尋表達式包含特殊字符,例如句點、括號等,那麼為了不使用 轉義它們,您可以使用該選項 -Q.

# Поиск с экранированием 
ack --json 'mysql.'    
# Поиск без экранирования
ack --json -Q mysql.

ack 比 grep 好

處理文件

取得具有特定副檔名的檔案列表

ack -f --js

ack 比 grep 好

使用選項 (-g).

ack -g --js '/Pa.+.js$'

ack 比 grep 好

組態

該實用程式有自己的設定檔。 您可以同時擁有使用者的全域配置 (~/.ackrc) 和特定資料夾的本機配置(您需要在該資料夾中建立 .ackrc 檔案)。

配置中寫入的大多數選項都可以在呼叫時手動指定。 讓我們來看看其中的幾個。

搜尋時忽略資料夾

--ignore-dir=dist

讓我們新增一個自訂檔案類型 -vue。

--type-add=vue:ext:js,vue

現在您可以使用 --vue 選項來搜尋文件 .vue。 例如: ack --vue 應用程式.
您可以為此選項指定擴展名清單。 例如,這裡,當使用-vue時,將處理以下內容:
.js 檔案。

忽略文件,例如縮小的 *.min.js

--ignore-file=match:/.min.js$/

安裝

CentOS的

yum update -y && yum install ack -y

Ubuntu

apt-get update -y && apt-get install ack-grep -y

Mac OS

brew update && brew install  ack

從現場安裝

curl https://beyondgrep.com/ack-v3.3.1 > ~/bin/ack && chmod 0755 ~/bin/ack

編輯器外掛:

結論

這些並不是所有的可能性。 可以透過執行以下命令查看完整的函數列表:

ack –-help
# или
ack --man

ack 實用程式可讓您在終端機中進行搜尋更加方便和靈活。 並使用管道(ack -C 10 你好 | 確認世界)您可以建立一個強大的組合來搜尋和過濾檔案系統和檔案本身中的資料。

來源: www.habr.com

添加評論