➣ Reading Time: 7 minutes

前言

我們在使用終端機指令時,很常會顯示一些欄位相關的資訊。
例如:「ls -l」/「ll」、「ps -a」、「top」、「history」等等
這些的結果都是有「欄位」的概念的 (也就是說,他的資訊是由行列所構成),
我們可以利用 grep, awk, xargs ,三種功能的結合,快速找到自己需要的資訊。

grep

算是 linux terminal 使用者在查詢資料的必備指令之一,
* 使用方式為:

原指令 | grep '搜尋目標'

注意中間的「|」,代表「且」的意思

使用範例:

top  | grep 'ubuntu'
  • 結果:只顯示包含 “搜尋目標” 的結果

原本 top 會顯示所有系統執行中的程式,
使用「grep」之後,我們只關心「ubuntu」這個使用者正在執行的程式。

awk

這個是針對當輸出欄位有行列的概念時,能夠只輸出單一的直行。

使用方式為:

原指令 | grep '搜尋目標' | awk '{print $0}'
  • $0:顯示全部內容
  • $1:顯示第1直行
  • $2:顯示第2直行…

使用範例:

1.我們可以先觀察使用「history」看歷史紀錄。

history  
  • 結果:

(只節錄一部份)

2.再來我們使用「grep ‘history’」只顯示出有history的欄位

history  | grep 'history'
  • 結果:

3.我們使用「awk ‘{print $1}’」只抓出第1直行的「第幾條目」

history  | grep 'history' | awk '{print $1}'
  • 結果:

就可以快速濾出我們想要的資料囉!

xargs

xargs 指的是我們對於篩選後的結果要進行什麼樣的動作,
例如我們可以使用「grep」的敘述篩選出所有「包含指定內容」的檔案,
然後透過「awk」只擷取檔名的部份
然後使用例如「xargs rm」,對所有篩選出的檔名進行「rm」的刪除操作

使用範例:

我們現在有一個1000張圖片照編號排的資料夾,

1. 看到所有檔案的完整資訊

ll
  • 結果:

2. 利用 grep,取出檔名包含 “000001” 的檔案

ll | grep '000001'
  • 結果:

3. 利用 awk,只取出檔名 (第9個直行,所以是 $9)

ll | grep "000001"  |  awk '{print $9}'
  • 結果:

4. 利用 xargs,對這些檔案進行操作 (這裡示範移除,rm)

ll | grep "000001"  |  awk '{print $9}' | xargs rm
  • 結果:因為都刪光光了所以沒圖XD

綜合運用 – 使用範例2

我們嘗試移除所有名字為 ‘none’ 的 docker images,

  • 指令如下:
docker images | grep '<none>'
# docker images | grep '<none>' | awk '{print 3}'
docker images | grep '<none>' | awk '{print3}' | xargs docker rmi
  • 效果如下:

Reference

https://unix.stackexchange.com/questions/37052/how-to-delete-files-filtered-out-by-awk
https://alvinalexander.com/blog/post/linux-unix/any-easy-way-print-column-or-columns-from-text-file-using-awk/

⭐Linux 指令 相關文章整理⭐:
⭐終端機 (terminal) 常用 總整理⭐:
1.(terminal指令 常用總整理)【Linux】linux/ubuntu/mac 基礎終端機 (terminal) 指令 & 基礎知識總整理,初學者/新手 必須知道的基礎指令 & 基礎知識大全(持續更新)
2.(terminal快速鍵 常用總整理)【Linux】linux/ubuntu/mac 基礎終端機 (terminal) 快速鍵/小技巧,初學者/新手 必須知道的一些實用功能!(持續更新)
3.(vim指令 常用總整理)【Linux】linux/ubuntu/mac vim 的 新手/初學者 的基礎使用指令 與 個人常用功能總整理 (持續更新)
4.【MobaXterm】在 Windows 中使用 MobaXterm VPN 連線至遠端系統 (linux, ubuntu) 遠端 ssh 顯示畫面
⭐Linux 基礎指令篇⭐:
1.【Linux】(作業系統基礎知識) 簡單理解「相對路徑」與「絕對路徑」,程式設計 初學者/新手 必須知道的路徑知識總整理
2.【Linux】linux ubuntu 中利用 mkdir 建立資料夾 相關參數總整理 (必定建立資料夾、修改資料夾權限 777)
3.【Linux】linux ubuntu 使用 terminal (終端機) 關機 shutdown、重新開機 reboot 的方法
⭐Linux 網路相關指令篇⭐:
1.【Linux】利用 ifconfig 查詢 ip 並用 scp 傳送資料 – linux, ubuntu 基礎終端機指令學習 sample code (內含範例程式碼)
2.【Linux】使用 sshfs 連線 將遠方磁碟當作像是在自己電腦的硬碟 mount disk on other computer
3.【Linux】使用 curl 將網路上的檔案 透過終端機 terminal 的方式下載 download
⭐Linux 進階指令篇 (檔案處理相關)⭐:
1.【Linux】linux, ubuntu 壓縮檔案常用指令 tar gzip zip 7z 壓縮檔案切割、壓縮檔案加密 與 解壓縮套件安裝方法 (內附圖文說明)
2.【Linux】Linux 查詢資料夾內的檔案數目 ls -1 | wc -l
3.【Linux】linux ubuntu 中利用 tail -f 可以查看 log 並不斷更新
4.【Linux】在終端機 terminal 使用 ln -s 建立如 windows, mac, ubuntu 檔案系統上的捷徑 – 軟連結 (Symbolic Link)
5.【Linux】linux, ubuntu 使用 split 指令檔案切割、檔案合併
6.【Linux】Linux 運用 sed 進行檔案內容的取代 instead 用法
7.【Linux】mac/ubuntu 如何利用 terminal 打開 GUI 資料夾總整理
⭐Linux 進階指令篇 (搜尋相關)⭐:
1.【Linux】linux, ubuntu 使用 ps, grep, pgrep 找到程式碼的 相關資訊 與 pid (ps aux, ps -ef)
2.【Linux】linux ubuntu 使用 grep, awk, xargs 尋找需要的資料,快速濾出/篩選 結果欄位 所需要的資訊 (內附圖文說明) filter column
⭐Linux 特殊應用篇⭐:
1.【Linux】Linux 增加 swap 的虛擬記憶體空間
2.【Linux】在 Ubuntu (Linux 系統) 上透過 / etc/fstab 安裝新的硬碟、新增硬碟容量 (SSD, HDD) (內附圖文說明)
3.【Linux】linux / ubuntu 複製硬碟的方法 copy all disk
4.【Linux】(內附圖文說明) ubuntu 停止自動更新的方法 disable auto update
5.【Linux】linux/ubuntu 下執行 anaconda-navigator 的方法
⭐Bash 自動化程式撰寫⭐:
1.【Bash】echo,bash 的 hello world 基本教學,開始自動化程式的第一堂課 / 撰寫腳本,利用 echo 顯示變數
⭐【喜歡我的文章嗎? 歡迎幫我按讚~ 讓基金會請創作者喝一杯咖啡!
如果喜歡我的文章,請幫我在下方【按五下Like】 (Google, Facebook 免註冊),會由 「LikeCoin」 贊助作者鼓勵繼續創作,讀者們「只需幫忙按讚,完全不用出錢」哦!

likecoin-steps