正則表達式

本系列的博客來自於:http://www.92csz.com/study/linux/linux

在此,感謝原做者提供的入門知識正則表達式

這個系列的博客的目的在於將比較經常使用的liunx命令從做者的文章中摘錄下來,供本身學習和複習之用。vim

 

grep / egrep編輯器

你要知道的是grep連同下面講的sed, awk都是針對文本的行才操做的。工具

語法: grep [-cinvABC] ‘word’ filename學習

-c :打印符合要求的行數ci

-i :忽略大小寫文檔

-n :在輸出符合要求的行的同時連同行號一塊兒輸出字符串

-v :打印不符合要求的行博客

-A :後跟一個數字(有無空格均可以),例如 –A2則表示打印符合要求的行以及下面兩行

-B :後跟一個數字,例如 –B2 則表示打印符合要求的行以及上面兩行

-C :後跟一個數字,例如 –C2 則表示打印符合要求的行以及上下各兩行

 

此處須要瞭解正則表達式

 

sed 工具的使用】刪除,修改不生效?

grep 工具的功能其實還不夠強大,其實說白了,grep實現的只是查找功能,而它卻不能實現把查找的內容替換掉。之前用vim的時候,能夠查找也能夠替換,可是隻侷限於在文本內部來操做,而不能輸出到屏幕上。sed工具以及下面要講的awk工具就能實現把替換的文本輸出到屏幕上的功能了,並且還有其餘更豐富的功能。sed和awk都是流式編輯器,是針對文檔的行來操做的。

a. 打印某行 sed -n ‘n’p filename 單引號內的n是一個數字,表示第幾行

b. 打印多行 打印整個文檔用 -n ‘1,$’p filename

c. 打印包含某個字符串的行  sed -n '/word/'p filename

d. -e 用來實現多個行爲   sed -e '1'p -e '/111/'p -n filename   同時輸出第一行,包含 111 的行

e. 刪除某行或者多行 sed '1'd filename sed '1,3'd filename sed '/oot/'d filename 

另外還能夠刪除從某一行一直到文檔末行 sed '3,$'d filename

f. 替換字符或字符串 sed '1,2s/ot/to/g' filename ’s’就是替換的命令,’g’爲本行中全局替換,若是不加’g’,只換該行中出現的第一個。

 除了可使用’/’外,還可使用其餘特殊字符例如’#’或者’@’都沒有問題。

g. 調換兩個字符串的位置

 sed 's/\(bin\)\(.*\)\(sbin\)/\3\2\1/' test.txt 

上例中用’()’把所想要替換的字符括起來成爲一個總體,由於括號在sed中屬於特殊符號,因此須要在前面加脫意字符’\’,替換時則寫成’\1’, ‘\2’, ‘\3’ 的形式。

筆者還經常用到在某一行前或者後增長指定內容。

 sed 's/^.*$/123&/' filename  在全部行前面增長123  

 sed 's/^.*$/&123/' filename  在全部行後面增長123  

h. 直接修改文件的內容

sed -i ‘s/:/#/g’ test.txt ,這樣就能夠直接更改test.txt文件中的內容了。

 

【awk工具的使用】

a. 截取文檔中的某個段

head -n2 test.txt  |awk -F':' '{print $1}'   

-F 選項的做用是指定分隔符,若是不加-F指定,則以空格或者tab爲分隔符。

Print爲打印的動做,用來打印出某個字段。$1爲第一個字段,$2爲第二個字段,依次類推,有一個特殊的那就是$0,它表示整行。

print還能夠打印自定義的內容,可是自定義的內容要用雙引號括起來。({print $1"@"$2"@"$3})

 

b. 匹配字符或字符串

 awk '/root/' filename

還有比sed更強大的匹配

awk -F':' '$5~/gopher/' filename 此處的~就是匹配的意思

awk -F':' '/root/{print $3} /ftp/{print $3}' test.txt  awk還能夠屢次匹配,匹配完root,再匹配ftp

 

c. 條件操做符

awk中是能夠用邏輯符號判斷的,好比’==’就是等於,也能夠理解爲「精確匹配」。另外也有’>’, ‘>=’, ‘<’, ‘<=’, ‘!=’ 等等,值得注意的是,即便$3爲數字,awk也不會把它當數字看待,它會認爲是一個字符。因此不要妄圖去拿$3當數字去和數字作比較

cat test.txt |awk -F':' '$3>="8"' 

 

d. awk的內置變量

NF :用分隔符分隔後一共有多少段; cat test.txt |awk -F':' '{print NF}'

$NF:表示最後一個分段的值   cat test.txt |awk -F':' '{print $NF}'

NR :打印行數大於2的行   awk 'NR>2' test.txt

 

e. awk中的數學運算

賦值  cat test.txt |awk -F':' '$1="root"'

加法  cat test.txt |awk -F':' '{$7=$3+$4;print $3,$4,$7}'

計算某個字段的總和  cat test.txt |awk -F':' '{(total+=$3)};END{print total}'

這裏的END要注意一下,表示全部的行都已經執行,這是awk特有的語法,其實awk連同sed均可以寫成一個腳本文件,並且有他們特有的語法,在awk中使用if判斷、for循環都是能夠的,只是筆者認爲平常管理工做中沒有必要使用那麼複雜的語句而已。

注意這裏’( )’的使用。

相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息