W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
比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ù)在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á)式。
ack官網(wǎng)列出了這工具的5大賣點(diǎn):
在記憶的時(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*'
對(duì)搜索結(jié)果進(jìn)行處理,比如只顯示一個(gè)文件的一個(gè)匹配項(xiàng),或者xxx
ack-grep --line=1 # 輸出所有文件第二行
ack-grep -l 'hello' # 包含的文件名
ack-grep -L 'print' # 非包含文件名
輸出的結(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 # 查找匹配正則的文件
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: