前言
在使用 terminal 時,經常會作各種搜尋,
整篇進行一些「個人常用的整理」。
這邊只進行一些「個人常用的整理」,因此不包含完整的功能介紹。
- ack : 搜尋程式碼內文 (專門)
- find : 搜尋檔案、資料夾
- grep : 搜尋程式碼內文
- find + grep: 搜尋指定範圍檔案,並檢查內文
安裝
grep, find 通常都是 linux 內建的,通常要安裝的只有比較進階搜尋的 ack。
安裝 ack
- macOS:
brew install ack
- Linux:
sudo apt-get install ack-grep
ack 使用
內文搜尋 (程式碼內搜尋)
- 找在檔案裡面,出現 test 的文字片段
ack test
搜尋 (不分大小寫)
ack 預設的搜尋「是有分大小寫的」
ack -i <test>
記法: i = ignore (忽略大小寫)
grep 使用
- grep 建議都下「–colour」這個 flag,會上顏色比較好判讀
有些系統內建的 alias 已經都有寫好這個方便的功能了,同樣的我們也能自己改
alias grep= grep –colour
直接取代原來的 grep
搜尋單一檔案內
grep test ./file.txt
搜尋資料夾內所有檔案 (習慣 ack 後可以取代)
- 搭配 -r 使用,結尾配上一個資料夾
grep -r test ./ --colour
find 使用
找檔案
- 顯示相對路徑
find ./ -name "*.png"
- 顯示絕對路徑
find ~+ -name "*.png"
找檔案,指定檔案(f, file) / 資料夾(d, directory)
- 找檔案(f, file)
find ./ -name "*.png" -type f
- 找資料夾(d, directory)
find ./ -name "*.png" -type d
進階用法 find + grep
先鎖定檔案 (例如 .py) 後,再找尋特定檔名
假如我們直接搜尋特定檔名 test,如果沒有先鎖定範圍,
有可能會找到
- test.py
- test2.py
- test3.py
- test.cpp
- test2.cpp
- test3.cpp
但我們可能只要
- test.py
- test2.py
- test3.py
這時我們就可以用到 find + grep
find ./ -name "*.py" | grep "test"
可以比較一下與下面指令的差別,更有學習效果。
先鎖定檔案 (例如 .py) 後,再檔案內文字內搜尋 (找多個檔案的,特定程式碼內容)
find ./ -name "*.py" -exec grep -H -n "test" {} \;
可以比較一下與上面指令的差別,更有學習效果。
說明:
- 「-exec」:執行後面指令
- 「grep -H」:(顯示完整檔案路徑)
- 「grep -n」:(顯示行號)
- 「 {} 」: 帶入前面參數
- 「 ; 」:作為指令的結束