linux常用文本處理命令筆記整理

linux常用文本處理的命令的使用率很高, 所以整理了一些之前的筆記,用markdown來記錄備忘。
首先拋出問題, 帶着問題來學記憶知識更有動力:

  • 如何通過一條命令取得eth0的IP4地址 :
    ifconfig eth0 | grep -w 'inet' | awk '{print $2}' | awk -F: '{print $2}'
  • 如何通過一條命令替換當前路徑下所有文件中的所有“xxx”爲“yyy“ :
    ls -alF | grep '^-' | xargs sed -i 's/xxx/yyy/g'
  • 如何通過一條命令殺掉佔用端口34600的進程 :
    sudo lsof -i:34600 | grep -v 'PID' | awk '{print $2}' | xargs kill -9

grep

grep(global search regular expression(RE) and print out the line,全面搜索正則表達式並把行打印出來)是一種強大的文本搜索工具,它能使用正則表達式搜索文本,並把匹配的行打印出來。

  • -a 不要忽略二進制數據。
  • -A<顯示列數> 除了顯示符合範本樣式的那一行之外,並顯示該行之後的內容。
  • -b 在顯示符合範本樣式的那一行之外,並顯示該行之前的內容。
  • -c 計算符合範本樣式的列數。
  • -C<顯示列數>或-<顯示列數> 除了顯示符合範本樣式的那一列之外,並顯示該列之前後的內容。
  • -d<進行動作> 當指定要查找的是目錄而非文件時,必須使用這項參數,否則grep命令將回報信息並停止動作。
  • -e<範本樣式> 指定字符串作爲查找文件內容的範本樣式。
  • -E 將範本樣式爲延伸的普通表示法來使用,意味着使用能使用擴展正則表達式。
  • -f<範本文件> 指定範本文件,其內容有一個或多個範本樣式,讓grep查找符合範本條件的文件內容,格式爲每一列的範本樣式。
  • -F 將範本樣式視爲固定字符串的列表。
  • -G 將範本樣式視爲普通的表示法來使用。
  • -h 在顯示符合範本樣式的那一列之前,不標示該列所屬的文件名稱。
  • -H 在顯示符合範本樣式的那一列之前,標示該列的文件名稱。
  • -i 胡列字符大小寫的差別。(常用
  • -l 列出文件內容符合指定的範本樣式的文件名稱。
  • -L 列出文件內容不符合指定的範本樣式的文件名稱。
  • -n 在顯示符合範本樣式的那一列之前,標示出該列的編號。
  • -q 不顯示任何信息。
  • -R/-r 此參數的效果和指定“-d recurse”參數相同。
  • -s 不顯示錯誤信息。
  • -v 反轉查找。(常用
  • -w 只顯示全字符合的列。(常用
  • -x 只顯示全列符合的列。
  • -y 此參數效果跟“-i”相同。
  • -o 只輸出文件中匹配到的部分。

awk

awk是一種編程語言,用於在linux/unix下對文本和數據進行處理。數據可以來自標準輸入(stdin)、一個或多個文件,或其它命令的輸出。它支持用戶自定義函數和動態正則表達式等先進功能,是linux/unix下的一個強大編程工具。它在命令行中使用,但更多是作爲腳本來使用。awk有很多內建的功能,比如數組、函數等,這是它和C語言的相同之處,靈活性是awk最大的優勢。

常用命令選項

  • -F fs fs指定輸入分隔符(awk默認的分隔符是空格),fs可以是字符串或正則表達式,如-F:
  • -v var=value 賦值一個用戶定義變量,將外部變量傳遞給awk

常用用法

b@b-VirtualBox:~/my_temp_test/abc$ cat abc3
klj;k uu
&& ss&
b@b-VirtualBox:~/my_temp_test/abc$ cat abc3 | awk '{print $NF}'
uu
ss&

cat abc3 | awk ‘{print $NF}’的含義是:輸出abc3文件的每一行的最後一列

b@b-VirtualBox:~/my_temp_test/abc$ cat abc3 | grep k | awk -F\; '{print $1}'
klj

cat abc3 | grep k | awk -F\; ‘{print $1}’的含義是:
先輸入含有k的那一行(即klj;k), 然後對那一行以;(\;, 這個分號需要轉義)分隔,打印出分隔後的第一列(即klj)

sed

sed是一種流編輯器,它是文本處理中非常中的工具,能夠完美的配合正則表達式使用,功能不同凡響。處理時,把當前處理的行存儲在臨時緩衝區中,稱爲“模式空間”(pattern space),接着用sed命令處理緩衝區中的內容,處理完成後,把緩衝區的內容送往屏幕。接着處理下一行,這樣不斷重複,直到文件末尾。文件內容並沒有 改變,除非你使用重定向存儲輸出。Sed主要用來自動編輯一個或多個文件;簡化對文件的反覆操作;編寫轉換程序等。

sed命令

  • a\ 在當前行下面插入文本。
  • i\ 在當前行上面插入文本。
  • c\ 把選定的行改爲新的文本。
  • d 刪除,刪除選擇的行。
  • D 刪除模板塊的第一行。
  • s 替換指定字符 h 拷貝模板塊的內容到內存中的緩衝區。
  • H 追加模板塊的內容到內存中的緩衝區。
  • g 獲得內存緩衝區的內容,並替代當前模板塊中的文本。
  • G 獲得內存緩衝區的內容,並追加到當前模板塊文本的後面。
  • l 列表不能打印字符的清單。
  • n 讀取下一個輸入行,用下一個命令處理新的行而不是用第一個命令。
  • N 追加下一個輸入行到模板塊後面並在二者間嵌入一個新行,改變當前行號碼。
  • p 打印模板塊的行。
  • P(大寫) 打印模板塊的第一行。
  • q 退出Sed。
  • b lable 分支到腳本中帶有標記的地方,如果分支不存在則分支到腳本的末尾。
  • r file 從file中讀行。
  • t label if分支,從最後一行開始,條件一旦滿足或者T,t命令,將導致分支到帶有標號的命令處,或者到腳本的末尾。
  • T label 錯誤分支,從最後一行開始,一旦發生錯誤或者T,t命令,將導致分支到帶有標號的命令處,或者到腳本的末尾。
  • w file 寫並追加模板塊到file末尾。
  • W file 寫並追加模板塊的第一行到file末尾。
  • ! 表示後面的命令對所有沒有被選定的行發生作用。
  • = 打印當前行號碼。
  • # 把註釋擴展到下一個換行符以前。

sed替換標記

  • g 表示行內全面替換。
  • p 表示打印行。
  • w 表示把行寫入一個文件。
  • x 表示互換模板塊中的文本和緩衝區中的文本。
  • y 表示把一個字符翻譯爲另外的字符(但是不用於正則表達式) \1 子串匹配標記 & 已匹配字符串標記

sed元字符集

  • ^ 匹配行開始,如:/^sed/匹配所有以sed開頭的行。
  • /sed /匹配所有以sed結尾的行。
  • . 匹配一個非換行符的任意字符,如:/s.d/匹配s後接一個任意字符,最後是d。
  • * 匹配0個或多個字符,如:/*sed/匹配所有模板是一個或多個空格後緊跟sed的行。
  • [] 匹配一個指定範圍內的字符,如/[ss]ed/匹配sed和Sed。
  • [^] 匹配一個不在指定範圍內的字符,如:/[^A-RT-Z]ed/匹配不包含A-R和T-Z的一個字母開頭,緊跟ed的行。
  • (..) 匹配子串,保存匹配的字符,如s/(love)able/\1rs,loveable被替換成lovers。
  • & 保存搜索字符用來替換其他字符,如s/love/&/,love這成love
  • \< 匹配單詞的開始,如:/\ 匹配單詞的結束,如/love>/匹配包含以love結尾的單詞的行。
  • x{m} 重複字符x,m次,如:/0{5}/匹配包含5個0的行。
  • x{m,} 重複字符x,至少m次,如:/0{5,}/匹配至少有5個0的行。
  • x{m,n} 重複字符x,至少m次,不多於n次,如:/0{5,10}/匹配5~10個0的行。

直接編輯文件選項-i,否則並不會修改源文件

sed常用用法1:增

b@b-VirtualBox:~/my_temp_test/abc$ cat abc3
&& gg&
b@b-VirtualBox:~/my_temp_test/abc$ sed -i '/gg/a\hello, my friend' abc3
b@b-VirtualBox:~/my_temp_test/abc$ cat abc3
&& gg&
hello, my friend

sed -i ‘/gg/a\hello, my friend’ abc3的含義是:
在abc3文件中的“gg”字符串的下一行插入“hello, my friend”

sed常用用法2:刪

b@b-VirtualBox:~/my_temp_test/abc$ cat abc3
&& gg&
hello, my friend
b@b-VirtualBox:~/my_temp_test/abc$ sed -i '/gg/d' abc3
b@b-VirtualBox:~/my_temp_test/abc$ cat abc3
hello, my friend

sed -i ‘/gg/d’ abc3的含義是:
將abc3文件中所有包含的“gg”字符串的行刪除

sed常用用法3:改

b@b-VirtualBox:~/my_temp_test/abc$ cat abc3
hello, my friend
b@b-VirtualBox:~/my_temp_test/abc$ sed -i 's/hello/welcome/g' abc3
b@b-VirtualBox:~/my_temp_test/abc$ cat abc3
welcome, my friend

sed -i ‘s/hello/welcome/g’ abc3的含義是:
將abc3文件中所有包含的“gg”字符串都修改爲“welcome”

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章