Linux文字處理技巧分享

大雄45發表於2020-04-19
導讀 作為一名   研發人員,幾乎每天都要面對文字處理場景。 因此 掌握文字處理套路 並 熟練運用文字處理  ,對於 提升工作效率 意義重大。本文以一個實戰例子拋磚引玉,介紹如何運用 grep 、 awk 、 sed 、 cut 等 進行文字處理, 以 快速 完成原本很繁瑣的操作。
背景

筆者開發機上有很多 Docker 映象,現在需要刪除名為 none 的那些:

$ docker images

Linux文字處理技巧分享Linux文字處理技巧分享

如何操作呢?莫非手工一個個刪除麼?

$ docker image rm f0fa889be9e8

試想,如果有上百個這樣的映象待刪,要搞到何年何月!但如何改進呢?

文字過濾

考慮先把名字為 none 的映象從結果中過濾出來,  grep 命令即可搞定:

$ docker images | grep none

Linux文字處理技巧分享Linux文字處理技巧分享

欄位提取

接著,將容器 ID 一列提取出來,這對 awk 來說簡直是小兒科:

$ docker images | grep none | awk '{print $3}'

Linux文字處理技巧分享Linux文字處理技巧分享

當然了,透過  cut命令進行 欄位切分 也可以得到相同的結果。 由於  cut 只能按單個字元進行切分,而原文字中的空格為多個,因此需要先進行 文字替換 。

文字替換

文字替換是  sed 命令擅長的事,下面將一個或多個空格替換成一個:

$ docker images | grep none | sed 's/  */ /g'

Linux文字處理技巧分享Linux文字處理技巧分享

文字切分

接下來,使用 cut 命令對結果進行進一步切分並取出第三個欄位:

$ docker images | grep none | sed 's/  */ /g' | cut -d ' ' -f 3

Linux文字處理技巧分享Linux文字處理技巧分享

不錯,我們得到與運用  awk 命令相同的結果。

批次刪除

接下來,透過  xargs 批次刪除映象:

$ docker images | grep none | awk '{print $3}' | xargs docker image rm

Linux文字處理技巧分享Linux文字處理技巧分享

在這個例子中, xargs 最終將執行以下命令:

$ docker image rm f0fa889be9e8 257954316455 99739acbfe7a 52b10754a70c 86878eefdd39

看到沒有,所有不想要的映象都刪除乾淨了,而且只需要進行一次操作:

$ docker images

Linux文字處理技巧分享Linux文字處理技巧分享

下面這個操作也是等價的:

$ docker images | grep none | sed 's/  */ /g' | cut -d ' ' -f 3 | xargs docker image rm

原文來自: 


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69955379/viewspace-2687061/,如需轉載,請註明出處,否則將追究法律責任。

相關文章