sed:字元流的編輯工具 (行編輯工具)==按照每行中的字元進行處理操作
sed 指令作用說明:
1).擅長對行進行操作處理
2).擅長将檔案的内容資訊進行修改調整/删除
編寫腳本:修改檔案内容資訊時
a sed指令查詢資訊方法
根據檔案内容的行号進行查詢
test1:顯示單行資訊
# sed -n '2p' kang.txt
test2:根據行号資訊,輸出多行内容(連續)
# sed -n '1,3p' kang.txt
test3:根據内容資訊,輸出多行内容(不連續)
# sed -n '1p;3p' kang.txt
根據檔案内容的資訊進行查詢
:根據内容資訊,輸出單行内容
# 将有kang 行的資訊,輸出單行内容
# sed -n '/kang/p' kang.txt
: 根據内容資訊,輸出多行内容(連續)
# 将有kang到he行的資訊都輸出出來
# sed -n '/kang/,/he/p' kang.txt
b sed指令添加資訊方法
在檔案第一行添加資訊
kang2021
# sed '1ikang2021' kang.txt
在檔案的最後一行添加資訊
kang2022
# sed '7akang2021' kang.txt
# sed '$akang,520' kang.txt
cat -n kang.txt顯示具體内容行号
總結: sed 指令的指令資訊
p print 輸出資訊
i insert 插入資訊,在指定資訊前面插入新的資訊
a append 附加資訊,在指定資訊後面附加新的資訊
d delete 删除指定資訊
s substitute 代替 g 全局
test: 在有hehao 的行前面添加youxiu;在zhidaobu後面添加wohenbang
# sed -e '/hehao/iyouxiu' -e '/zhidaobu/awohenbang' kang.txt
# 添加多行資訊
# sed '$a100\n101' kang.txt
總結: sed指令的參數資訊
-n 取消預設輸出
-r 識别擴充正則
-i 真實編輯檔案(将記憶體中的資訊覆寫到磁盤中)
-e 識别sed指令多個操作指令
檔案中添加内容的方法:
1. vim/vi
2. cat >>xxx<EOF .. EOF
3. echo -e "xxx\nxxx"
4. sed 'na/ixxx\nxxx'
c sed指令删除資訊方法
- 删除單行資訊
# sed ‘2d’ kang.txt
- 删除多行資訊
# sed '2,4d' kang.txt (2-4)
# sed '3d;6d' kang.txt (3和6)
- 删除有kang520資訊的行
# sed '/kang520/d' kang.txt
- 取消空行顯示
# sed '/^$/d' kang.txt
d sed指令修改資訊方法
# sed 's#原内容#修改後内容#g' kang.txt
# sed 's#()#\n#g' 檔案資訊 後項引用前項
提取ip位址的方法
# ip a s ens33|sed -rn '3s#^.*t (.*)/24.*#\1#gp'
修改檔案内容直接進行自動備份
# sed -i .bak 's#kang520#kang2020#g' kang.txt
批量修改檔案的擴充名,将kangxxx.txt 擴充名修改為kang.bak
# ls kang*.txt|sed -r 's#(.*)txt#mv & \1bak#g'
專業指令:rename
rename .txt .bak kang*.txt
awk 擅長對列進行操作/進行資料資訊的統計(數組)
作用特點:
- 排除資訊
- 查詢資訊
- 統計資訊
- 替換資訊
文法格式:
awk [參數] '模式-動作' 檔案[root@ansible ~]# cat awk.txt
Zhang Dandan 2733885168 :250:100:175
Zhang Xiaoyu 390320151 :155:90:201
Meng Feixue 80042789 :250:60:50
Wu Waiwai 70271111 :250:80:75
Liu Bing 4117483 :250:100:175
Wang Xiaoai 3515064655 :50:95:135
Zi Gege 1986787350 :250:168:200
Lao Nanhai 918391635 :250:100:300
指令查詢資訊方法:
按照行号查詢資訊:
# 單行
# awk 'NR==2' awk.txt
# 多行
# awk 'NR==2,NR==4' awk.txt
# 多行(不連續)
# awk 'NR==2;NR==4' awk.txt
按照字元查詢
# awk 'Xiaoyu' awk.txt
# awk '/Xiaoyu/' awk.txt
# awk '/Xiaoyu/,/Waiwai/' awk.txt
# awk '/Xiaoyu/;/Waiwai/' awk.txt
指定列
# awk '/Xiaoyu/{print $1,$3}' awk.txt
Zhang 390320151
# awk '/Xiaoyu/{print $1","$3}' awk.txt
Zhang,390320151
# awk '/Zhang/{print $NF}' awk.txt
:250:100:175
:155:90:201
-F 指定分隔符
awk '/Zhang/{print $NF}' awk.txt| awk -F ":" '{print $3}'
100
90
# awk -F ":" '/Zhang/{print $3}' awk.txt
# awk -F "[ :]+" '/Zhang/{print $5}' awk.txt
# awk -F "[ :]+" '/Zhang/{print $(NF-1)}' awk.txt
顯示所有以41開頭的ID号碼的人的全名和ID号碼
# awk '$3~/^41/{print $1,$2,$3}' awk.txt
Liu Bing 4117483
Lao Nanhai 418391635
顯示所有ID号碼最後一位數字是1或5的人的全名
1)
# awk '$3~/[15]$/{print $1,$2}' awk.txt
Zhang Xiaoyu
Wu Waiwai
Wang Xiaoai
Lao Nanhai
2)
# awk '$3~/1$|5$/{print $1,$2}' awk.txt
3)
[root@ansible ~]# awk '$3~/(1|5)$/{print $1,$2}' awk.txt | column -t
Zhang Xiaoyu
Wu Waiwai
Wang Xiaoai
Lao Nanhai
gsub (/需要替換的資訊/,"修改成什麼資訊",将哪列資訊進行修改)
# awk '$2~/Xiaoyu/{gsub(/:/,"$",$NF);print$NF}' awk.txt
$155$90$201
檔案中的空行進行排除/檔案中注釋資訊進行排除
# grep -Ev "^#|^$" 檔案資訊
# sed -n '/^#|^$/!p' 檔案資訊
# awk '/^#|^$/' awk.txt
#
總結: awk指令中$符号的用法
$1 $2 $3 : 取第幾列
$NF : 取最後一列資訊
$(NF-n) :取倒數第幾列
$0 : 取所有列的資訊
awk進階功能說明
a. 對日志資訊進行統計(技術)
b. 對日志資訊數值進行求和 用戶端-下載下傳 服務端-上傳 (消耗網絡流量)
c. (數組)進行排序分析
d. 腳本編寫(循環語句 判斷語句)
awk模式說明:比對的條件資訊
普通模式
- 正規表達式作為模式
# awk '/^oldboy/{print xx}'
- 利用比較比對資訊
NR==2
NR>=2
NR<=2
NR==3,NR==10 (範圍)
-
特殊模式
BEGIN{}
# awk 'BEGIN{print "姓","名","捐款記錄"}{print $0}' awk.txt | column -t
姓 名 捐款記錄
Zhang Dandan 2733885168 :250:100:175
Zhang Xiaoyu 390320151 :155:90:201
Meng Feixue 80042789 :250:60:50
Wu Waiwai 70271111 :250:80:75
Liu Bing 4117483 :250:100:175
Wang Xiaoai 3515064655 :50:95:135
Zi Gege 1986787350 :250:168:200
Lao Nanhai 418391635 :250:100:300
- END{}
# awk 'BEGIN{print "姓","名","捐款記錄"}{print $0}END{print "操作結束"}' awk.txt | column -t
姓 名 捐款記錄
Zhang Dandan 2733885168 :250:100:175
Zhang Xiaoyu 390320151 :155:90:201
Meng Feixue 80042789 :250:60:50
Wu Waiwai 70271111 :250:80:75
Liu Bing 4117483 :250:100:175
Wang Xiaoai 3515064655 :50:95:135
Zi Gege 1986787350 :250:168:200
Lao Nanhai 418391635 :250:100:300
操作結束
# awk -vFS=":" '{print $2}' awk.txt
250
155
50
# awk '/^$/{i=i+1;print i}' awk.txt
1
2
# awk '/^$/{i=i+1}END{print i}' awk.txt
- 統計系統中有多少個虛拟使用者 普通使用者