Linux命令 ack -比grep好用的文本搜索工具

2021-10-28 09:45 更新

ack

比grep好用的文本搜索工具

安裝

#  ubuntu下要安裝ack-grep,因?yàn)樵赿ebian系中,ack這個(gè)名字被其他的軟件占用了。
sudo apt-get install ack-grep
#  alpine Linux-apk軟件包管理器 安裝 ack
apk install ack

語法

 ack [選項(xiàng)] PATTERN [文件...]
 ack -f [選項(xiàng)] [目錄...]

參數(shù)

這些參數(shù)在linux上的適用頻率是相當(dāng)高的,尤其是你用vim做為IDE的話

注:帶逗號(hào)的為不同的輸入方式,比如?-a?等效于?--all?。另外,以下并非全部參數(shù)列表!

-a ,--all      

#  對(duì)所有文件進(jìn)行操作,無論是什么類型(但仍會(huì)跳過blib、CVS等目錄)

-c ,--count

#  抑制正常輸出;而是為每個(gè)輸入文件打印匹配行的計(jì)數(shù)。

#  如果-l有效,它將只顯示每個(gè)文件中具有匹配行的行數(shù)。  

#  如果沒有-l,某些行計(jì)數(shù)可能為零。

# 如果與-h 組合,則ack僅輸出一個(gè)總計(jì)數(shù)。

--color , --nocolor

#  --color突出顯示匹配的文本。 --nocolor抑制顏色。

#  除非重定向輸出,否則默認(rèn)情況下這是打開的。

#  在 Windows 上,此選項(xiàng)默認(rèn)關(guān)閉,除非安裝 了 Win32::Console::ANSI 聯(lián)機(jī)幫助頁模塊或使用了ACK_PAGER_COLOR 環(huán)境變量。

--color-filename=顏色

#  設(shè)置用于文件名的顏色。

--color-match=顏色

#  設(shè)置用于匹配的顏色。

--color-lineno=顏色

#  設(shè)置用于行號(hào)的顏色。

-F      

#  只打印要搜索的文件,而不實(shí)際進(jìn)行任何搜索。不得指定 PATTERN,否則將作為搜索路徑。

-g      

#  打印相對(duì)路徑 + 文件名與正則表達(dá)式匹配的文件。此選項(xiàng)是-f -G 正則表達(dá)式的便捷快捷方式。

#  -f的使用方式詳見語法示例第二例

#  選項(xiàng)-i、-w、-v和-Q不適用于此正則表達(dá)式。

-G      

#  搜索中只包含匹配正則表達(dá)式的路徑。    

#  整個(gè)路徑和文件名與正則表達(dá)式匹配,并且正則表達(dá)式是 Perl 正則表達(dá)式,而不是 shell glob。

#  選項(xiàng)-i、-w、-v和-Q不適用于此正則表達(dá)式。

-H , --with-filename

#  打印每個(gè)匹配項(xiàng)的文件名。

-h , --no-filename    

#  搜索多個(gè)文件時(shí),禁止輸出文件名的前綴。

--help  

#  打印簡短的幫助聲明。

-i , --ignore-case     

#  忽略搜索字符串中的大小寫。

#  這僅適用于 PATTERN,不適用于為-g 和-G選項(xiàng)提供的正則表達(dá)式。

  

-l ,--files-with-matches

#  只打印匹配文件的文件名,而不是匹配的文本。

-L, --files-without-matches

#  只打印不匹配的文件名。這等效于指定-l和-v。

-n ,--no-recurse

#  不遞歸到子目錄。

-Q ,--literal 

#  引用 PATTERN 中的所有元字符,它被視為文字。

#  這僅適用于 PATTERN,不適用于為-g 和-G選項(xiàng)提供的正則表達(dá)式。

-r , -R , --recurse

#  遞歸到子目錄。這是默認(rèn)設(shè)置,只是為了與 grep 兼容。

#  您還可以使用它來關(guān)閉--no-recurse。

-v , --invert-match

#  反轉(zhuǎn)匹配:選擇不匹配的行

#  這僅適用于 PATTERN,不適用于為-g 和-G選項(xiàng)提供的正則表達(dá)式。

--version 

#  顯示版本和版權(quán)信息。

-w , --word-regexp

#  強(qiáng)制 PATTERN 只匹配整個(gè)單詞。PATTERN 用\b元字符包裝 。

#  這僅適用于 PATTERN,不適用于為-g 和-G選項(xiàng)提供的正則表達(dá)式。

特點(diǎn)

ack官網(wǎng)列出了這工具的5大賣點(diǎn):

  1. 速度非???因?yàn)樗凰阉饔幸饬x的東西。
  2. 更友好的搜索,忽略那些不是你源碼的東西。
  3. 為源代碼搜索而設(shè)計(jì),用更少的擊鍵完成任務(wù)。
  4. 非常輕便,移植性好。
  5. 免費(fèi)且開源

實(shí)例

在記憶的時(shí)候大體上可以分為這幾個(gè)部分:

Searching 代碼搜索

Search output 搜索結(jié)果處理

File presentation 文件展示

File finding 文件查找

File inclusion/exclusion 文件過濾

grep常用操作

grep -r 'hello_world' #  簡單用法
grep '^hello_world' . #  簡單正則
ls -l | grep .py #  管道用法

搜索

簡單的文本搜索,默認(rèn)是遞歸的。

ack-grep hello
ack-grep -i hello
ack-grep -v hello
ack-grep -w hello
ack-grep -Q 'hello*'

搜索結(jié)果處理

對(duì)搜索結(jié)果進(jìn)行處理,比如只顯示一個(gè)文件的一個(gè)匹配項(xiàng),或者xxx

ack-grep --line=1       #  輸出所有文件第二行
ack-grep -l 'hello'     #  包含的文件名
ack-grep -L 'print'     #  非包含文件名

輸出結(jié)果展示

輸出的結(jié)果是以什么方式展示呢,這個(gè)部分有幾個(gè)參數(shù)可以練習(xí)下

ack-grep hello --pager='less -R'    #  以less形式展示
ack-grep hello --noheading          #  不顯示頭文件
ack-grep hello --nocolor            #  不對(duì)匹配字符著色

文件查找

沒錯(cuò),它可以查找文件,以省去你要不斷的結(jié)合find和grep的麻煩,就像linux的思想:一個(gè)工具做好一件事。

ack-grep -f hello.py                #  查找全匹配文件
ack-grep -g hello.py$               #  查找正則匹配文件
ack-grep -g hello  --sort-files     #  查找然后排序

文件過濾

文件過濾,個(gè)人覺得這是一個(gè)很不錯(cuò)的功能。如果你曾經(jīng)在搜索項(xiàng)目源碼時(shí)不小心命中日志中的某個(gè)關(guān)鍵字的話,你會(huì)覺得這個(gè)有用。

ack-grep --python hello       #  查找所有python文件
ack-grep -G hello.py$ hello   #  查找匹配正則的文件

參考資料


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)