天天看點

三劍客sed:字元流的編輯工具 (行編輯工具)==按照每行中的字元進行處理操作awk 擅長對列進行操作/進行資料資訊的統計(數組)

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指令删除資訊方法

  1. 删除單行資訊

# sed ‘2d’ kang.txt 

  1. 删除多行資訊

# sed '2,4d' kang.txt (2-4)

# sed '3d;6d' kang.txt (3和6)

  1. 删除有kang520資訊的行

# sed '/kang520/d' kang.txt

  1. 取消空行顯示

# 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 擅長對列進行操作/進行資料資訊的統計(數組)

作用特點:

  1. 排除資訊
  2. 查詢資訊
  3. 統計資訊
  4. 替換資訊

文法格式:

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模式說明:比對的條件資訊

普通模式

  1. 正規表達式作為模式

# awk '/^oldboy/{print xx}'

  1. 利用比較比對資訊

NR==2

NR>=2

NR<=2

NR==3,NR==10 (範圍)

  1. 特殊模式

    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

  1. 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

  1. 統計系統中有多少個虛拟使用者 普通使用者
上一篇: Shell
下一篇: Mysql進階