grep用法:grep [參數] '關鍵字' 文件名 #關鍵詞也能夠是正則表達式 grep [-cinvABC] 'word' filename -c 統計包含'關鍵字'的行數。既使一行有多個關鍵字,也會按一行計算。 -i 篩選'關鍵字'時不區分大小寫。 -n 篩選'關鍵字'時顯示關鍵字所在的行號。 -v 反向選擇,也就是'關鍵字'之外的內容。 -r 查詢關鍵詞時遍歷路徑下的子目錄。 -An 這裏的n是一個數字。做用是過濾出符合要求的行以及下面的「n」行。 -Bn 同上,區別爲符合要求的行以及上面的「n」行。 -Cn 同上,區別爲符合要求的行以及上下的各「n」行。 grep -n 'root' /etc/passwd #顯示出現root的行數 grep -nv 'nologin' /etc/passwd #不顯示出現root的行數 grep '[0-9]'/etc/inittab #顯示 /etc/inittab文件下出現0-9關鍵詞的行數 grep -v '[0-9]'/etc/inittab #顯示 /etc/inittab文件下出現0-9關鍵詞以外的行數 grep -v '^#' /etc/inittab #^符號表示開頭,#符號表示結尾。此處爲顯示/etc/inittab內容中不帶空行的內容 grep -v '^#' /etc/inittab|grep -v '^$' grep '^[^a-zA-Z]' test.txt grep 'r.o' test.txt grep 'oo*' test.txt grep '.*' test.txt grep 'o\{2\}' /etc/passwd egrep 'o{2}' /etc/passwd egrep 'o+' /etc/passwd egrep 'oo?' /etc/passwd egrep 'root|nologin' /etc/passwd egrep '(oo){2}' /etc/passwd
egrep == grep -E
egrep能夠在'關鍵字'中使用擴展正則表達式中的字符。 擴展正則表達式字符:
# 井號
| 豎線
() 小括號
+ 加號
? 問號
{} 花括號正則表達式
[] 方括號表示一個範圍,能夠是括號內的任意一個字符。
[a-z] 全部的小寫字母
[A-Z] 全部的大寫字母
[a-zA-z] 全部的字母
[0-9] 全部的數字。
^ 即爲shift+6。表示以什麼什麼開頭。例如'^#'即爲以#號開頭。
$ 即爲shift+4。表示以什麼什麼結尾。例如'g$'即爲以g結尾。
^$ 用來表示一個空行。就是開頭至結尾中間啥也沒有。
. 表示任意一個字符。
* 表示匹配星號左邊的字符0次或屢次。
+ 表示匹配加號左邊的字符一次或屢次。
? 表示匹配問號左邊的字符零次或兩次。
{n} 其中n爲數字或是範圍。當內容是範圍時用逗號分隔。表示匹配花括號左邊的一個字符n次。
() 小括號中的內容被視爲一個總體。
.* 表示任意個字符shell
格式:sed 命令參數 '動做範圍'參數 文件或路徑
-n 只顯示匹配的行。
-e 執行多個匹配條件。
-r 使用擴展正則表達式字符。等同於grep -E和egrep的關係。
-i 執行結果直接寫入文件。編程
p 顯示全部內容。因爲p會顯示全部內容,因此通常有p的場和都加-n。
d 顯示動做範圍之外的內容。
I 大寫的I表示內容不區分大小寫。編程語言
sed 命令中單引號中間的內容可使用相似vi命令中的查找替換。
普通查找替換: 's/源內容/替換內容/g'post
1,在「/」的前面加「\」脫義符。使它成爲字符而不是命令。
2,使用「#」或「@」代替「/」的分界符功能。注間,這裏是代替分界符而不是查找替換內容中的「/」。spa
1,刪除指定內容。
能夠在源內容裏使用[]來指定範圍。好比[1-9]爲數字,[a-z]是小寫字母。
在[]內使用「^」也就是shift+6符號。是反向選擇的意思。好比[^1-9]就是數字之外所有的意思。
2,替換內容中的&符號。能夠表明源內容的每一行。
例:sed 's/.*/1234&/' test
就是在每一行的開頭加1234。反之就是在未尾加。.net
對文件內容順序調換的方法:code
1,分段:
第一段 ([^:]+)#^:表示冒號以外的字符
表示開頭至一個或多個非冒號的字符。
第二段 (:.:)
表示冒號開頭,和冒號結尾的內容。
第三段 ([^:]+)
表示非冒號的一個或多個字符而後結尾。blog
2,調換位置
使用\反斜槓加數字表示分段,而後從新排序。
sed -r 's/([^:]+)(:.:)([^:]+)/\3\2\1/' test排序
格式:
awk -F '分割符' '動做' 文件名
例: awk -F ':' '' test |awk -F ':' '{print $1}'
以上就是以冒號爲分割符,輸出第1段的內容。
$一、$二、$3分別表示第一段、第二段、第三段。而$0表示整行。
awk -F ':' '$1 ~/oo/' test
awk -F ':' '/root/ {print $1,$3} /test/ {print$1,$3,$4}' test
[root@localhost tmp]# awk -F ':' '$3 == 0' test
awk -F ':' '{OFS="#"} {if ($3>1000) {print $1,$2,$3,$4}}' /etc/passwd
awk -F ':' '$1="aaa"' test
awk -F ':' '{(sum=sum+$3)}; END {print sum}' /etc/passwd
awk的完整形式: awk -F ':' 'BEGIN {}; {條件}; END{}' filename 其中BEGIN和END均可以省略。中間的條件是依次執行文件中的每一行。 好比這個{(sum=sum+$3)}. #或者sum+=¥3 他就會執行這個文件的NR(行數)的統計。