Linux ag 搜尋字串用法與範例(比 grep 還快)

本篇介紹 Linux 下超強的搜尋字串工具「The Silver Srarcher」,The Silver Srarcher 簡稱 ag, ag 號稱比 ack 快(ack 又號稱比 grep 快),這麼厲害的 ag 搜尋工具還不趕緊手刃在 Linux 裝起來試試。

以下的 Linux ag 用法與範例將分為這幾部分,

  • ag 安裝方法
  • ag 基本用法
  • ag 指定目錄下搜尋
  • ag 排除目錄
  • ag 搜尋內容符合的檔案 pipe 給 sed 取代文字
  • ag 常用選項
  • ag 搭配正規表達式

那我們開始吧!

ag 安裝方法

Ubuntu 下安裝方法為

1
sudo apt-get install silversearcher-ag

macOS 下 Homebrew 安裝方法為

1
brew install the_silver_searcher

ag 基本用法

基本上 ag 跟 grep 大部分用法一樣,甚至一些常用的選項都變成 ag 的預設選項,這樣使用者也不太需要記一堆選項,使用上自然方便很多,假設要搜尋 main 這個關鍵字,那麼 ag 的使令可以這樣用,

1
ag "main\"

假設要搜尋 main ( 這個關鍵字,( 搜尋特殊字元要加 \

1
ag "main\("

ag 指定目錄下搜尋

指定 src 目錄下搜尋

1
ag "main\(" src

指定 src, aaa, bbb 多個目錄下搜尋

ag 排除目錄

排除 3rdparty 目錄之外

1
ag "main\(" --ignore-dir 3rdparty

排除 3rdparty, doc 多個目錄之外

1
ag "main\(" --ignore-dir 3rdparty --ignore-dir doc

ag 搜尋內容符合的檔案 pipe 給 sed 取代文字

ag 搜尋內容符合的檔案 pipe 給 sed 取代文字的方式如下,範例內容是假設我要搜尋檔案內容有 http 的字串找出來後將這些檔案名稱 pipe 給 sed 取代文字,將這些檔案裡的 http 全部取代成 https,

1
2
3
4
# Linux
ag "http" -l | xargs sed -i 's/http/https/g'
# macOS
ag "http" -l | xargs sed -i "" 's/http/https/g'

如果 ag 換成 grep 的話,可以參考下面這個寫法或這篇

1
2
3
4
# Linux
grep -ri "http" * -l | xargs sed -i 's/http/https/g'
# macOS
grep -ri "http" * -l | xargs sed -i "" 's/http/https/g'

ag 常用選項

ag 另外其他很有用的選項是
ag -i 使用大小寫不敏感的匹配方式
ag -w 全詞匹配
ag -G ".+\.java" 搜索 java 類型的檔案
ag -l 顯示有匹配的檔案路徑
ag -L 顯示沒有任何匹配的檔案路徑
ag -v 反向匹配,將匹配到的資料排除

ag 搭配正規表達式

ag 顯示 abc 開頭,

1
ag ^abc log.txt

ag 顯示 abc 結尾,

1
ag abc$ log.txt

ag 顯示數字,例如 abc0 ~ abc9 開頭,

1
ag abc[0-9] log.txt

其它相關文章推薦
Linux 常用指令教學懶人包
Linux grep 搜尋字串用法與範例
Linux grep/ack/ag 搜尋字串用法與範例
Linux cut 字串處理用法與範例
Linux sed 字串取代用法與範例
Linux find 尋找檔案/尋找資料夾用法與範例