項目 widget-area-1 尚未註冊或是沒有一個 view.php 檔案.
項目 widget-area-1 尚未註冊或是沒有一個 view.php 檔案.
項目 search-input 尚未註冊或是沒有一個 view.php 檔案.

【Linux 搜尋內容 #1】ack, grep, find – 在 terminal 的各種搜尋大全, 個人經常使用情境整理

前言

在使用 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」:(顯示行號)
  • 「 {} 」: 帶入前面參數
  • 「 ; 」:作為指令的結束

Reference