grep 逞盆、sed、awk被稱為linux中的"三劍客"松申。
grep 更適合單純的查找或匹配文本
sed 更適合編輯匹配到的文本
awk 更適合格式化文本云芦,對文本進(jìn)行較復(fù)雜格式處理
重要:awk 、sed 贸桶、grep查找文件中包含字符的行
awk '{if($0~"listAuths") print}' xxx.log
抽出包含listAuths的行內(nèi)容
sed -n -e '/listAuths/p' test3.txt
抽出包含listAuths的行內(nèi)容
grep -n 'listAuths' test3.txt
抽出包含listAuths的行內(nèi)容
find /root/ -name "te*txt" | xargs grep -in "listAuths"
尋找包含listAuths字符串文件名:te
開頭txt
結(jié)尾的文件
awk其實是一門編程語言舅逸,它支持條件判斷、數(shù)組皇筛、循環(huán)等功能堡赔。所以,我們也可以把awk理解成一個腳本語言解釋器设联。
awk做打印file內(nèi)容
//打印文本中內(nèi)容
[root@wangkjlinux ~]# echo ddd > testawk
[root@wangkjlinux ~]# awk '{print}' testawk
ddd
awk打印列善已、多列
awk '{print $X}' file 要打印每行的第X列
//打印第二列
[root@wangkjlinux ~]# echo 1111 222 > testawk2
[root@wangkjlinux ~]# awk '{print $2}' testawk2
222
打印第一列和第二列
[root@wangkjlinux ~]# awk '{print $1,$2}' testawk2
1111 222
篩選展現(xiàn)列or加上自己描述一起展現(xiàn)
awk做運算
兩個列做個減法就好
awk -F
awk -F ':',以冒號為分隔符离例,把輸出的行分隔换团,默認(rèn)是空行
awk -F":" '{print $1}' /etc/passwd
awk -F":" '{print $1 $3}' /etc/passwd //$1與$3相連輸出,不分隔
awk -F":" '{print $1,$3}' /etc/passwd //多了一個逗號宫蛆,$1與$3使用空格分隔
awk -F":" '{print $1 " " $3}' /etc/passwd //$1與$3之間手動添加空格分隔
awk -F":" '{print "Username:" $1 "\t\t Uid:" $3 }' /etc/passwd //自定義輸出
awk -F: '{print NF}' /etc/passwd //顯示每行有多少字段
awk -F: '{print $NF}' /etc/passwd //將每行第NF個字段的值打印出來
awk -F: 'NF==4 {print }' /etc/passwd //顯示只有4個字段的行
awk -F: 'NF>2{print $0}' /etc/passwd //顯示每行字段數(shù)量大于2的行
awk '{print NR,$0}' /etc/passwd //輸出每行的行號
awk -F: '{print NR,NF,$NF,"\t",$0}' /etc/passwd //依次打印行號艘包,字段數(shù)的猛,最后字段值,制表符想虎,每行內(nèi)容
awk -F: 'NR==5{print}' /etc/passwd //顯示第5行
awk -F: 'NR==5 || NR==6{print}' /etc/passwd //顯示第5行和第6行
route -n|awk 'NR!=1{print}' //不顯示第一行
awk -F'' OFS=',' 輸出的格式以X做分隔
[root@wangkjlinux ~]# awk '{print}' testawk2
1111 222
[root@wangkjlinux ~]# awk '{print $1,$2 "\n33333,444444"}' OFS=',' testawk2 > testawk3
[root@wangkjlinux ~]# cat testawk3
1111,222
33333,444444
sed 的使用
- 打印具體行數(shù)內(nèi)容
[root@wangkjlinux ~]# cat testawk3
1111,222
33333,44444
111124,33333,qrrr
123we,ert4,123
1112222
[root@wangkjlinux ~]# sed -n '2p' testawk3
33333,44444
[root@wangkjlinux ~]# sed -n '2,4p' testawk3
33333,44444
111124,33333,qrrr
123we,ert4,123
-
顯示包含"1111"的行到包含"qrrr"的行之間的行
sed -n '/1111/,/qrrr/p' testawk3
-
打印1-4行卦尊,并顯示行號
sed -n -e '1,4p' testawk3
sed 替換部分字段輸出
sed 's/aa/AA/' test3.txt
grep
1基礎(chǔ)正則表達(dá)式
grep 工具,以前介紹過舌厨。
grep -[acinv] '搜索內(nèi)容串' filename
-a 以文本文件方式搜索
-c 計算找到的符合行的次數(shù)
-i 忽略大小寫
-n 順便輸出行號
-v 反向選擇岂却,即找 沒有搜索字符串的行
其中搜索串可以是正則表達(dá)式! grep -n '[0-9]' xxx.txt
2 利 用[]搜索集合字符
[] 表示其中的某一個字符 ,例如[ade] 表示a或d或e
woody@xiaoc:~/tmp$ grep -n 't[ae]st' regular_express.txt
8:I can't finish the test.
9:Oh! the soup taste good
收搜包含xxx的文件裙椭,并且文件中包含aa字符串
find /root/ -name "te*txt" | xargs grep -in "aa"