三劍客入門

三劍客入門

grep、awk、sedhtml


 

grep命令

grep爲三劍客之一,主要用於篩選、過濾。正則表達式

顯示文件中含有某個字符或字符串的行。

[root@oldboyedu50 data]# grep "oldboy" /data/test.txt

grep 「篩選內容」 目錄shell

顯示文件中除某個字符或字符串的行。

[root@oldboyedu50 data]# grep -v "oldboy" /data/test.txt

不顯示行(空格行和空白行) 
ide

egrep -v '^$|^ +$' lidao.txt 
grep -v 「篩選內容」 目錄
函數

選項:

grep: 
-v:取反 
-n:顯示行號 
-E:擴展正則 
-o:鏈接符,有而且的意思 
-i:不區分大小寫 
-l:過濾的時候只顯示文件名字 
find+grep 
-A2:after 顯示你要找的行以及接下來的兩行 
-B2:顯示你要找的行以及上面兩行 
-C2:顯示你要找的行以及上下各兩行 
--color:匹配內容高亮顯示 
--include: 指定匹配的文件類型 
--exclude: 過濾不須要匹配的文件類型
spa


 

awk命令

三劍客之一,擅長取列。命令行

選取含有某個字符或字符串的行。

[root@oldboyedu50 data]# awk '/oldboy/' /data/test.txt

awk ‘/字符串/’ 目錄code

選取不含有某個字符或字符串的行。

[root@oldboyedu50 data]# awk '!/oldboy/' /data/test.txt

awk ‘!/字符串/’ 目錄server

在passwd.txt中,將用戶與shell解釋器調換位置

awk -F: -vOFS=: '{print $NF,$2,$3,$4,$5,$6,$1}' passwd.txt
awk -F: -vOFS=: '{tmp=$1;$1=$NF;$NF=tmp;print}' passwd.txt

 

正則表達式

在oldboy.txt中,查找文件第三列列中包含數字4的行

awk ‘$3~/4/’ oldboy.txt

 

查找文件第三列中以某個字符開頭的行

awk '$3~/^4/' /server/files/reg.txt

 

顯示有某一特徵的行的其餘列

awk '$2~/Xiaoyu/{print $1,$3}' reg.txt

 

顯示某列以某個字符串開頭的行的其餘列

awk '$3~/^41/{print $1,$2,$3}' reg.txt

 

補充:

一、awk的默認動做是輸出全部列 
二、awk默認過濾 
‘/oldboy/’ ‘0!~/oldboy/’
htm

顯示文件某列包含某兩個字符其中一個的行的其餘列

awk '$3~/5$|1$/{print $1,$2}' reg.txt 
awk '$3~/[15]$/{print $1,$2}' reg.txt

 

顯示xiaoyu的捐款,每一個值時都有以開頭,如520135(替換單個字符並顯示)

awk '$2~/Xiaoyu/{gsub(/:/,"$");print}' reg.txt

 

awk添加字符,顯示想要的格式。

awk -vOFS=, '{print $1,$2}' reg.txt 
awk '{print $1","$2}' reg.txt

 

比較表達式

格式:

'條件 {動做}'

選項

-F 定義分隔符 
-v 定義變量

awk內置變量

NR 行號 number of record 
NF 每行有多少列 number of filed 
FS 指定的分隔符 -F: ==== -vFS=: 
OFS output 輸出分隔符 顯示每一列的時候 每一列之間經過什麼分開 
RS 以點(.)爲記錄分隔符,顯示行號與文件內容針對行

awk 內置命令(函數)

gsub (//,」」,某一列) 
gsub (/找誰/,」替換爲誰」,某一列) 
gsub (/找誰/,」替換爲何」)====gsub (/找誰/,」替換爲誰」,$0)\


 

sed命令

斜體文本三劍客之一,擅長過濾和取行。* 
sed命令執行過程 
1.讀取文件內容第1行 
2.是否知足條件 
1).知足條件 執行對應的命令 
2).不知足 繼續第1步 
3.截止到文件的最後一行

顯示:

顯示文件的第5行 

sed -n 5p person.txt 

顯示文件的第三行到最後一行 

sed -n '3,$p' person.txt 

顯示文件中包含oldboy的行 

sed -n '/oldboy/p' person.txt 
sed '/oldboy/d' person.txt

顯示文件的第1和4行和5行 

sed -n '1p ;4p; 5p' person.txt

顯示 有規律的行 

seq 10 |sed -n '1~2p' 

顯示文件的某個字符串的行及前兩行 

sed -n '/Alex/,+2p' person.txt 
grep -A2 person.txt

 

增長

c 替換 
a 追加到某行下一行 
i 插入某行的上一行 
追加到文件末尾 

sed '$a12306,xiao,UFO\n12580,tao,XO' person.txt 

追加到文件第三行 

sed '3c12306,xiao,UFO' person.txt 

sed ‘數字c要添加的內容’ 文件

刪除

刪除第二行到第五行 

sed -n '2,5p' person.txt 

刪除從某個字符串開始的行 

sed '/yy/,$d' person.txt

 刪除不包含某個字符串的行 

sed '/lidao/!d' person.txt

 

企業案例:不顯示文件中的空行

grep -v '^$' lidao.txt 
sed '/^$/d' lidao.txt 
awk '!/^$/' lidao.txt 
sed -n '/^$/!p' lidao.txt

 

替換

將文件中出現的字符串統一修改。 

sed 's#oldboy#oldgirl#g' t.sh

sed 's#將要修改的內容#修給爲何#g' 目錄 

將文件中的數字替換爲空 

sed 's#[0-9]##g' person.txt 

修改文件並備份 

sed -i.bak 's#girl#boy#g' t.sh 

-i.bak 先備份文件 t.sh.bak 而後修改文件內容 

後項引用 

ifconfig eth0 |sed -rn '2s#^.*r:(.*) Bc.*#\1#gp'

 

提取IP

[root@oldboyedu50-lnb ~]# ifconfig eth0 |sed -rn '2s#^.*r:(.*) Bc.*#\1#gp'
10.0.0.200 
[root@oldboyedu50-lnb ~]# ifconfig eth0 |awk -F'[ :]+' 'NR==2{print $4}'
10.0.0.200 
[root@oldboyedu50-lnb ~]# ifconfig eth0 |awk -F'addr:| Bc' 'NR==2{print $2}'
10.0.0.200 
[root@oldboyedu50-lnb ~]# ifconfig eth0 |awk -F'[^0-9.]+' 'NR==2{print $2}'
10.0.0.200

 

批量重命名:刪除文件名中的html_

touch oldboy_html_{01..10}.jpg

 方法一: 

[root@oldboyedu50-lnb ~]# ls *|sed -r 's#(^.*y_)(.*_)(.*$)#\1\3#g'

方法二: 

[root@oldboyedu50-lnb ~]# for i in {01..10}; do echo "mv oldboy_html_$i.jpg oldboy_$i.jpg"; done

方法三: 

[root@oldboyedu50-lnb ~]# rename oldboy oldgirl *.jpg

找誰 替換爲何 替換哪些文件

顯示不是以空格開頭的行

awk '!/[[:space:]]/' person.txt 
sed -r '/[[:space:]]/d' person.txt 
sed -nr '/[[:space:]]/!p' person.txt

選項、參數

-n:只打印模式匹配的行 
-e:直接在命令行模式上進行sed動做編輯,此爲默認選項 
-f:將sed的動做寫在一個文件內,用–f filename 執行filename內的sed動做 
-r:支持擴展表達式 
-i:直接修改文件內容


 

活學活用

顯示文件20-30行的內容。

方法一:
[root@oldboyedu50 data]# head -30 /data/ett.txt |tail -11

方法二:

[root@oldboyedu50 data]# sed -n '20,30p' /data/ett.txt

方法三:

[root@oldboyedu50 data]# awk 'NR==20,NR==30' /data/ett.txt
相關文章
相關標籤/搜索