grep的一些命令參數
-A num:匹配到搜索到的行以及該行下面的num行
-B num:匹配到搜索到的行以及該行上面的num行
-C num:匹配到搜索到的行以及上下各num行
-i ---忽略字符大小寫的差別
-c ---計算符合樣式的列數
-v ---顯示不包含匹配文本的所有行
-o ---只顯示匹配部分
-E ---支持擴展正則
-n ---標示出該行的列數編號
-r ---以遞歸的方式查找符合條件的文件
-w ---只顯示全字符合的列
三劍客sed命令概念介紹
作用說明: stream editor for filtering and transforming text
文件處理編輯命令
原理過程: 按照文件每行信息進行處理, 找出符合條件信息, 執行相應操作
語法結構: sed [參數] '條件 指令操作' 文件信息
如何進行查詢
a 按照行號查詢信息
查找單行信息: sed -n '3p' 文件信息
查找多行信息: sed -n '2,4p' 文件信息 連續多行
sed -n '2p;4p' person.txt 不連續多行
sed -n '2,代表末尾
b 按照字符查詢信息
查找單行信息: sed -n '/CTO/p' person.txt
查看多行信息: sed -n '/CTO/,/CIO/p' person.txt
sed -n '/CTO/p;/CIO/p' person.txt
如何進行刪除
sed -i '6d' person.txt
sed -i.bak '/COO/d' person.txt --- 將源文件內容先進行備份, 在進行操作
sed -ri '/CFO|CTO/d' person.txt
坑: 刪除一個文件有#號的行
1) 查詢需要刪除內容
sed -n '/^#/p' config
- 刪除文件信息
sed -i '/^#/p' config
PS:
- -i參數后面不能再跟上其他參數
- -i參數和-n參數盡量不要結合使用
-i : 真正修改文件內容
sed顯示行號 sed ‘=’ xxx.txt | xargs -n2
如何進行添加
3a: 在第三行的下面添加相應信息
3i: 在第三行的上面添加相應信息
添加多行: \n 轉移換行
sed -i '2a103,Alex,COO\n104,yy,CFO' person.txt
-e : 表示可以識別多個操作信息
sed -e '2i103,Alex,COO' -e '3a104,yy,CFO' person.txt
如何進行修改
sed 參數 's#需要替換信息#替換成什么信息#g' 文件信息
sed 'Init_IP#
File_info --- 指定變量信息做替換需要注意雙引號使用
后向引用前項替換:
[root@linux67 scripts]# echo 1234|sed -r 's#(12)(34)#\1#g'
12
[root@linux67 scripts]# echo 1234|sed -r 's#(12)(34)#\2#g'
34
[root@linux67 scripts]# echo 1234567890|sed -r 's#.*#<&>#g'
<1234567890>
練習題: 利用sed命令取出IP地址信息
思路1) 顯示出IP地址
ip a s eth0
思路2) 有IP地址的行顯示出來
ip a s eth0|sed -n '3p'
inet 10.0.0.200/24 brd 10.0.0.255 scope global noprefixroute eth0
思路3) 取出IP地址
ip a s eth0|sed -n '3p'|sed -r 's#^.*et (.*)#\1#g'|sed -r 's#(.*)/24.*$#\1#g'
sed -r 's#^.*et (.*)#\1#g'
sed -r 's#(.*)/24.*$#\1#g'
ip a s eth0|sed -n '3p'|sed -r 's#^.*et (.*)/24.*$#\1#g'
sed -n '3p'
sed -r 's#^.*et (.*)/24.*$#\1#g'
ip a s eth0|sed -nr '3s#^.*et (.*)/24.*$#\1#gp'
sed命令應用總結
sed命令參數總結:
-n : 取消默認輸出
-e : 識別多操作指令
-r : 識別擴展正則
-i : 真正編輯修改文件內容
sed命令指令信息:
p : 輸出顯示指定信息
d : 刪除指定信息
s : 替換指定信息
g : 全局替換信息
a : 添加指定信息在相應行的后面
i : 插入指定信息在相應行的前面
c : 將一行信息進行替換修改 sed '2c oldxuan' 1.txt 把1.txt的第二行改成了oldxuan
三劍客awk命令概念介紹
概念說明: pattern scanning and processing language
模式識別和腳本編寫
執行原理: 按行處理文件信息, 根據匹配條件信息, 完成相應操作動作
語法結構: awk [參數] '模式信息(條件) {動作}' 文件信息
如果想對文件里的格式加以調整可以使用column -t 奧找表格的形式一列一列呈現
顯示xiaoyu的姓氏和ID號碼 NR表示行信息 number row 行號的意思
a 可以根據行號信息進行處理
將xiaoyu信息進行匹配
awk 'NR==2' /oldboy/awk_test.txt
根據需求進行處理
awk 'NR==2{print 3}' /oldboy/awk_test.txt
執行過程:
[root@linux67 ~]# awk 'NR==2{print 3}' /oldboy/awk_test.txt
Zhang 390320151
[root@linux67 ~]# awk 'NR==2{print 3}' /oldboy/awk_test.txt
Zhang 390320151
說明: awk取出多列信息可以使用 , 或者 " " 進行分隔
b 可以根據內容信息進行處理 ~是匹配的意思
思路1) 將xiaoyu信息進行匹配
awk '$2~/Xiaoyu/' /oldboy/awk_test.txt
思路2) 根據需求進行處理
awk '1,$3}' /oldboy/awk_test.txt
awk可以對列分隔符號進行修改 -F "分隔符號"
awk -F ":" '{print 3}' test.txt
awk '1~/Zhang/{print
2,$5}' awk_test.txt
顯示所有以41開頭的ID號碼的人的全名和ID號碼
awk '1,
3}' awk_test.txt
awk '1,
3}' awk_test.txt |column -t
顯示所有ID號碼最后一位數字是1或5的人的全名
awk '|5
3~/[15]$/' awk_test.txt
顯示全名信息:awk '/{print
2}' awk_test.txt
顯示所有ID號碼最后一位數字不是1或5的人的全名:
awk '/{print
2}' awk_test.txt
awk '/{print
2}' awk_test.txt
awk '/{print
2,$3}' awk_test.txt
顯示Xiaoyu的捐款,每個捐款數值都有以
110
330
awk -F "[: ]+" '"
"
"
2~/Xiaoyu/{print
#g'
awk '4}' awk_test.txt |tr ':' '
x) --> gsub(/要替換的信息/,"替換成什么信息",
",)
awk '",
NF}' awk_test.txt
90
NF表示最后一列, ? 倒數第二列 ==
NF ==
(NF-1) (
(4-1)
4==
NF-1==50-1=49
總結:
awk用到的參數: -F 指定列分隔符號
awk用到的動作: print 輸出指定的信息
gsub 替換指定的信息
awk內置的變量: NR 表示行號信息
NF 表示列號信息
三劍客awk命令高級使用
模式概念:
匹配條件信息 普通
a 根據正則信息進行
b 根據范圍信息進行
匹配連續的多行
[root@linux67 oldboy]# cat test.txt
01 oldboy python
02 oldboy ptone
03 oldboy path
04 oldboy ptzh
05 oldboy ptzh
06 oldboy ptzh
07 oldboy ptzh
[root@linux67 oldboy]# awk 'NR>2' test.txt
03 oldboy path
04 oldboy ptzh
05 oldboy ptzh
06 oldboy ptzh
07 oldboy ptzh
[root@linux67 oldboy]# awk 'NR<5' test.txt
01 oldboy python
02 oldboy ptone
03 oldboy path
04 oldboy ptzh
[root@linux67 oldboy]# awk 'NR>2 && NR<5' test.txt
03 oldboy path
04 oldboy ptzh
[root@linux67 oldboy]# awk 'NR==2,NR==5' test.txt
02 oldboy ptone
03 oldboy path
04 oldboy ptzh
05 oldboy ptzh
匹配不連續多行
[root@linux67 oldboy]# awk 'NR==2||NR==5||NR==7' test.txt
02 oldboy ptone
05 oldboy ptzh
07 oldboy ptzh
[root@linux67 oldboy]# awk 'NR==2;NR==5;NR==7' test.txt
02 oldboy ptone
05 oldboy ptzh
07 oldboy ptzh
特殊模式
BEGIN: 在文件處理之前完成相應操作
awk 'BEGIN{print "姓","名","ID","捐款記錄"}{print 0}END{print "人員捐款記 錄表"}
可以實現數值運算 --- 計算器
[root@linux67 oldboy]# awk 'BEGIN{print 2+3}'
5
[root@linux67 oldboy]# awk 'BEGIN{print 2-3}'
-1
[root@linux67 oldboy]# awk 'BEGIN{print 2*3}'
6
[root@linux67 oldboy]# awk 'BEGIN{print 2^3}'
8
[root@linux67 oldboy]# awk 'BEGIN{print 2/3}'
0.666667
內置變量:
NR : 表示行的信息
NF : 表示列的信息
FS : 表示指定分隔符號
[root@linux67 oldboy]# awk 'BEGIN{name="oldgirl"}1,
2~/Xiaoyu/{print "name",
2}' awk_test.txt
name Zhang Xiaoyu
[root@linux67 oldboy]# awk -F "[ :]+" '1,
5}' awk_test.txt
Zhang Dandan 100
Zhang Xiaoyu 90
[root@linux67 oldboy]# awk 'BEGIN{FS="[ :]+"}1,
5}' awk_test.txt
Zhang Dandan 100
Zhang Xiaoyu 90
[root@linux67 oldboy]# awk -vFS="[ :]+" '1,
5}' awk_test.txt
Zhang Dandan 100
Zhang Xiaoyu 90
內置變量:
NR : 表示行的信息
NF : 表示列的信息
FS : 表示指定分隔符號
- 可以實現信息統計
如何進行累加運算 --> i=i+1 初始i=0 經過一次運算 i=1 經過運算 i=2
說明:
[root@linux67 oldboy]# awk '$(NF-1)~/男生/' test.txt
武佳偉 Linux67 小白 15000 男生 大學 匹配一次男生信息 做一次運算 i=i+1 == i=0+1 i=1
顧宏磊 Linux67 經驗 13000 男生 大專 匹配二次男生信息 做一次運算 i=i+1 == i=1+1 i=2
柴仁義 Linux67 畢業 12000 男生 大學 匹配三次男生信息 做一次運算 i=i+1 == i=2+1 i=3
實現過程:
[root@linux67 oldboy]# awk '(NF-1)~/男生/{i=i+1}END{print i}' test.txt
3
[root@linux67 oldboy]# awk '(NF-1)~/男生/{i=i+1}END{print "班級男生數量:",i}' test.txt
班級男生數量: 3
如何進行求和運算 ---> i=i+n表示需要進行求和運算列信息
武佳偉 Linux67 小白 15000 男生 大學 15000 做求和運算 i=i+4 --> i=15000+13000 print i 28000
柴仁義 Linux67 畢業 12000 男生 大學 12000 做求和運算 i=i+4 --> i=40000+14000 print i 54000
[root@linux67 oldboy]# cat test.txt
武佳偉 Linux67 小白 15000 男生 大學
顧宏磊 Linux67 經驗 13000 男生 大專
柴仁義 Linux67 畢業 12000 男生 大學
隨文悅 Linux67 肄業 14000 女生 大學
[root@linux67 oldboy]# awk '{i=i+4}END{print i}' test.txt
54000
[root@linux67 oldboy]# awk '{i=i+$4}END{print i/4}' test.txt
13500
END: 在文件處理之后完成相應操作
[root@linux67 oldboy]# awk 'BEGIN{print "姓","名","ID","捐款記錄"}{print $0}END{print "人員捐款記 錄表"} awk_test.txt
姓 名 ID 捐款記錄
Zhang Dandan 41117397 :250:100:175
Zhang Xiaoyu 390320151 :155:90:201
Meng Feixue 80042789 :250:60:50
Wu Waiwai 70271111 :250:80:75
Liu Bingbing 41117483 :250:100:175
Wang Xiaoai 3515064655 :50:95:135
Zi Gege 1986787350 :250:168:200
Li Youjiu 918391635 :175:75:300
Lao Nanhai 918391635 :250:100:175
人員捐款記錄表
作用:
- 輸出最終結果信息
說明: $0 將每一列信息都進行輸出