grep、awk、sed
html
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
三劍客之一,擅長取列。命令行
[root@oldboyedu50 data]# awk '/oldboy/' /data/test.txt
awk ‘/字符串/’ 目錄code
[root@oldboyedu50 data]# awk '!/oldboy/' /data/test.txt
awk ‘!/字符串/’ 目錄server
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
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
awk '$2~/Xiaoyu/{gsub(/:/,"$");print}' reg.txt
awk -vOFS=, '{print $1,$2}' reg.txt awk '{print $1","$2}' reg.txt
'條件 {動做}'
-F 定義分隔符
-v 定義變量
NR 行號 number of record
NF 每行有多少列 number of filed
FS 指定的分隔符 -F: ==== -vFS=:
OFS output 輸出分隔符 顯示每一列的時候 每一列之間經過什麼分開
RS 以點(.)爲記錄分隔符,顯示行號與文件內容針對行
gsub (//,」」,某一列)
gsub (/找誰/,」替換爲誰」,某一列)
gsub (/找誰/,」替換爲何」)====gsub (/找誰/,」替換爲誰」,$0)\
斜體文本三劍客之一,擅長過濾和取行。*
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'
[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
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:直接修改文件內容
[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