亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Regex > 正文

shell腳本之正則表達式、grep、sed、awk

2020-03-16 20:46:49
字體:
來源:轉載
供稿:網友

--正則--

基礎正則

^word     ##搜索以word開頭的 vi/vim中 ^ 一行的開頭
word$     ##搜索以word結尾的 vi/vim中 $ 一行的結尾
^$        ##表示空行
.         ##代表且只能代表任意一個字符
/         ##例:/. 只代表點本身,轉義符號,讓有特殊身份意義的字符,脫掉馬甲,還原
/n        ##換行符
/r        ##匹配回車
/w         ##匹配任意一個字符和數字
*         ##重復0次或多次前面的一個字符
.*        ##匹配所有字符。例:^.* 以任意多個字符開頭,.*$以任意多個字符結尾
[abc]     ##匹配字符集內的任意一個字符
[^abc]    ##匹配不包含 ^ 后的任意字符的內容。中括號里的 ^ 為取反
[1-9]     ##表示匹配括號內的范圍內的任意字符
a/{n,m/}  ##重復n到m次前一個重復的字符。若用egrep、sed -r可以去掉斜線
/{n,/}    ##重復至少n 次前一個重復的字符。若用egrep、sed -r可以去掉斜線
/{n/}     ##重復n 次前一個重復的字符。若用egrep、sed -r可以去掉斜線
/{,m}/    ##重復少于m次

注:egrep,grep –E或sed –r 過濾一般特殊字符可以不轉義

擴展正則(egrep或grep -E)

+          ##重復一次或一次以上前面的一個字符
?          ##重復0次或一次前面的一個字符
|          ##或者的意思,用或的方式查找多個符合的字符串
()         ##找出括號內的字符串

^linux     ##以linux開始linux$     ##以linux結束linuxfan.   ##匹配linuxfans等coo[kl]    ##匹配cool或cook9[^5689]    ##匹配91,92等,但不匹配95,96,98,99[0-9]     ##匹配任意一個所有的數字[a-z]|[A-Z]  ##匹配任意一個所有大小寫字母,|屬于擴展正則grep -E支持colou?r    ##匹配color或colour,但是不能匹配colouurrollno-9+   ##匹配rollno-9、rollno-99,rollno-999,但不匹配rollno-co*l      ##匹配cl,col,cool,coool等ma(tri)x    ##匹配matrix[0-9]{3}    ##匹配任意一個三位數,等于[0-9][0-9][0-9][0-9]{2,}   ##匹配任意一個兩位數或更多位的數字[0-9]{2,5}   ##匹配從兩位數到五位數之間的任意一個數字Oct (1st|2nd) ##匹配Oct 1st或Oct 2nda/.b      ##匹配a.b,但不能匹配ajb[a-z0-9_]+/@[a-z0-9_]+/.[a-z]{2,4}       ##匹配一個郵箱地址[0-9]{1,3}/.[0-9]{1,3}/.[0-9]{1,3}/.[0-9]{1,3} ##匹配IP地址--grep--

語法:grep [選項] [條件表達式] 目標文件

cat /proc/meminfo |grep -e Mem -e Cache -e Swap     ##查看系統內存、緩存、交換分區-e的作用是匹配多個表達式grep -R -o -n -E  '[a-z0-9_]+/@[a-z0-9_]+/.[a-z]{2,4}' /etc/     ##查找/etc目錄下的所有文件中的郵件地址;-R遞歸,-n表示匹配的行號,-o只輸出匹配內容,-E支持擴展正則表達式,grep -R -c 'HOSTNAME' /etc/ |grep -v "0$"     ##查找/etc/目錄下文件中包含“HOSTNAME”的次數,-c統計匹配次數,-v取反grep -R -l 'HOSTNAME' /etc/           ##查找包含“HOSTNAME”的文件名,-l顯示匹配的文件名,-L顯示不匹配的文件名dmesg | grep -n --color=auto 'eth'       ##查找內核日志中eth的行,顯示顏色及行號dmesg | grep -n -A3 -B2 --color=auto 'eth'     ##用 dmesg 列出核心信息,再以 grep 找出內含 eth 那行,在關鍵字所在行的前兩行與后三行也一起找出出來顯示cat /etc/passwd |grep -c bash$         ##統計系統中能登錄的用戶的個數touch /tmp/{123,123123,456,1234567}.txt   ##創建測試文件,以下三條命令是一樣的效果,匹配文件名123,可以包含1個到多個ls |grep -E '(123)+' ls |grep '/(123/)/+'ls |egrep '(123)+'ps -ef |grep -c httpd             ##統計httpd進程數量grep -C 4 'games' --color /etc/passwd       ##顯示games匹配的“-C”前后4行grep ^adm /etc/group             ##查看adm組的信息ip a |grep -E '^[0-9]' |awk -F : '{print $2}'     ##獲取網卡名稱ifconfig eth0 |grep -E -o 'inet addr:[^ ]*' |grep -o '[0-9.]*'   ##截取ip地址,[^ ]*表示以非空字符作為結束符,[0-9.]*表示數字和點的組合ip a |grep inet |grep eth0 |grep -o "inet[^/]*" |grep -o "[0-9.]*"  ##截取ip地址ifconfig eth0 |grep -i hwaddr |awk '{print $5}'   ##截取MAC地址ip a |grep -A 3 "eth0" |grep link/ether |grep -o "ether[^r]*" |grep -o -E "[0-9a-f:]+"|grep -E "[0-9a-f:]{2}$"      ##截取MAC地址grep "^m" oldboy.log       ##過濾輸出以m開頭的行grep "m$" oldboy.log grep -vn "^$" oldboy.log       ##過濾空行grep -o "0*" oldboy.log grep -o "oldb.y" oldboy.log grep "/.$" oldboy.log       ##以.結尾的行grep "0/{3/}" oldboy.log       ##重復三次

 

--sed--

語法:sed [options] 'command' file(s) 

選項:

-n 抑制自動打印pattern space,sed默認輸出全部,-n用于取消默認輸出
-i 編輯文件
-r 支持擴展正則表達式

1.改:

語法:sed '/正則匹配條件/s/old/new/g' 文件
sed 's/dhcp/static/g' /etc/sysconfig/network-scripts/ifcfg-eth1 ##只是顯示,不修改
sed -i 's/dhcp/static/g' /etc/sysconfig/network-scripts/ifcfg-eth1 ##只修改,不顯示
sed -i 's/dhcp/static/g' ip ##將所有的dhcp替換為static
sed -i '/^IP1/s/static/dhcp/g' ip ##將IP1開頭的行替換
sed -i '2s/static/dhcp/g' ip ##指定特定行號2行替換
cat -n /etc/selinux/config ##查看并顯示行號
sed -i '7s/disabled/enforcing/g' /etc/selinux/config ##開啟selinux

2.刪:

語法:sed '/表達式/d' 文件
vim ip ##添加空行
sed '/^$/d' ip ##刪除空行并顯示在屏幕上
sed -i '/IP1/d' ip ##刪除包含IP1的行
sed -i '/^IP2/d' ip ##刪除以IP2開頭的行
sed -i '2d' ip ##刪除第二行

3.增:

語法:sed ' /表達式/a "需要添加的文字"' 文件
sed 'a IP3=static' ip ##每一行后都加上IP3=static
sed '3a IP3=static' ip ##只在第3行后加上IP3=static,并顯示不修改
sed '3i IP3=static' ip ##只在第3行前加上IP3=static,顯示不修改
sed -i '3a IP3=static' ip ##修改,不顯示
sed -i '/^IP3/a "test add"' ip ##在以IP3開頭的行后添加

4.查:

語法:sed -n '/表達式/p' 文件sed -n '2p' /etc/hosts ##查看第二行sed -n '/www/p' /var/named/chroot/var/named/linuxfan.cn.zone ##查看包含www的解析記錄sed -n '/.100$/p' /var/named/chroot/var/named/linuxfan.cn.zone ##查看以.100結尾的行sed -n '2~2p' ip ##從第二行,每隔兩行顯示ifconfig eth0|sed -n '2p'|sed 's#.*dr:##g'|sed 's# Bc.*##g'    ##注:當sed命令處理的內容為多行內容,則以/作為表達式的分隔,若sed命令處理的內容為單行內容,作為截取的作用,以#號作為分隔符;10.0.0.9 ifconfig eth0|sed -n '2p'|sed -r 's#(.*dr:)(.*)(Bc.*$)#/2#g'    ##-r支持擴展正則,/2將2轉義,打印出第二個范圍(.*)10.0.0.9 ifconfig eth0|sed -n '2p'|sed -r 's#.*dr:(.*) Bc.*$#/1#g'10.0.0.9 ifconfig eth0|sed -nr '2s#^.*dr:(.*) Bc.*$#/1#gp'10.0.0.9ifconfig eth0|sed -nr '1s#^.*dr (.*)#/1#gp'00:0C:29:33:C8:75 ifconfig eth0|sed -n '1p'|sed -r 's#(^.*dr )(.*)#/2#g'00:0C:29:33:C8:75ifconfig eth0|sed -n '1p'|sed 's#^.*dr ##g'      00:0C:29:33:C8:75ifconfig eth0|sed -nr '1s#^.*t (.*) 00.*$#/1#gp'HWaddrstat /etc/hosts|sed -n '4p'                Access: (0644/-rw-r--r--) Uid: (  0/  root)  Gid: (  0/  root)stat /etc/hosts|sed -n '4p'|sed 's#^.*ss: (##g'|sed 's#/-.*$##g'0644stat /etc/hosts|sed -n '4p'|sed -r 's#^.*s: /((.*)/-.*$#/1#g'0644stat /etc/hosts|sed -nr '4s#^.*s: /((.*)/-.*$#/1#gp'0644stat /etc/hosts|sed -nr '4s#(^.*s: /()(.*)(/-.*$)#/2#gp'0644--awk--

語法:
awk [選項] '模式{動作(action)}' 文件1 文件2 ...
選項: -F   指定輸入分隔符,可以是字符串或正則表達式
常用動作: print、printf

chkconfig --list |grep 3:啟用 |awk '{print $1}'tail -1 /etc/passwd |awk -F ':' 'BEGIN{OFS="---"}{print $1,$6,$7}'  ##OFS指定輸出分隔符ifconfig eth1 |awk -F '[ :]+' 'NR==2 {print $4}'ifconfig eth1 |awk -F '[ :]+' 'NR==2 {print "eth1_ip="$4}' ##可以加入顯示內容awk 'BEGIN {print "line one /nline two/nline three"}'

匹配范圍(ranges):指定的匹配范圍,格式為part1,part2

awk -F : '$3==3,$3==10{print $1,$3,$7}' /etc/passwdawk -F : '$1=="root",$1=="adm"{print $1,$3,$7}' /etc/passwdawk -F : '/^r/,/^a/{print $1,$3,$7}' /etc/passwd

awk區塊原理:

區域構成: 

BEGIN { 動作 } ##開始處理第一行文本之前的操作
{ 動作 } ##針對每一行文本的處理操作
END { 動作 } ##處理完最后一行文本之后的操作
執行流程: 
 首先執行 BEGIN { } 區塊中的初始化操作;
 然后從指定的數據文件中循環讀取一個數據行(自動更新 NF、 NR、 $0、 $1…… 等內建變量的值),并執行'模式或條件{ 動作 }';
 最后執行 END { } 區塊中的后續處理操作。

案例:

awk -F : 'BEGIN{printf "%-10s%-10s%-20s/n","UserName","ID","Shell"}{printf "%-10s%-10s%-20s/n",$1,$3,$7}' /etc/passwd ##在awk處理之前打印頭部BEGIN{}
ifconfig eth0 |awk -F':' 'NR==2{print $2,$4}'|awk 'BEGIN{OFS=" / "}{print "IP="$1,"MASK="$3}'

awk的變量:
awk變量:
FS:列分隔符,默認位空白
RS:行分隔符,默認位換行符
OFS:輸出列分隔符
ORS :輸出行分隔符
awk內置變量:
NR:處理中行數
FNR:單個文件的行數
NF:列的個數

案例:

ifconfig eth1 |awk '{print NR}'ifconfig eth1 |awk '{print NF}'

 

自定義變量案例:

awk 'BEGIN{test="www.linuxfan.cn";print test}'awk -v test="linuxfan.cn" 'BEGIN{print test}'

printf的使用:

格式:printf "格式",列表1,列表2 ...

特征:

a.必須指定format(格式),用于指定后面item(列表)的輸出格式

b.printf語句不會自動打印換行符:/n

c.format格式以%加一個字符,如下:

%c:顯示字符的ASCII碼
%d,%i:十進制整數
%f:顯示浮點數(小數)
%s:顯示字符串
%u:無符號整數
%%:顯示%

d.修飾符:N:顯示寬度,-:左對齊,+:顯示數值符號,如%-c(左對齊)

案例:

chkconfig --list |grep 3:啟用 |awk '{printf "%-10s",$1}' ##在統一行顯示
awk -F : '{printf "%-15s %-10d %-10s/n",$1,$3,$7}' /etc/passwd

awk的操作符:

算數操作符: x^y、x/y、x+y、x-y、x%y
比較操作符:>、<、>=、<=、==、!=
邏輯操作符:&&、||、!

awk常見的模式類型

正則表達式(regexp):awk -F : '/^u/{print $1}' /etc/passwd

表達式(expression):值位非0或位非空是滿足條件,如$1 ~ /foo/或 $1 == "root"

案例:

awk -F : '$3>=500{print $1,$3,$7}' /etc/passwd ##打印普通用戶awk -F : '$3+1<=100&&$3+1>=10{print $1,$3,$7}' /etc/passwd ##UID在10-100之間的用戶awk -F : '$2=="!!"{print $1,$2}' /etc/shadow ##檢查未初始化密碼的用戶passwd -d u01 awk -F : '$2==""{print $1}' /etc/shadow ##打印密碼為空的用戶awk -F : '$7~"bash$"{print $1,$3,$7}' /etc/passwd ##匹配$7為bash結束行awk -F : '$7!~"bash$"{print $1,$3,$7}' /etc/passwd

總結

以上所述是小編給大家介紹的shell腳本之正則表達式、grep、sed、awk ,希望對大家有所幫助,如果大家有任何疑問歡迎給我留言,小編會及時回復大家的!


注:相關教程知識閱讀請移步到正則表達式頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国内精品一区二区三区四区| 国产美女精品视频免费观看| 日韩欧亚中文在线| 欧美国产视频日韩| 欧美日本啪啪无遮挡网站| 国产精品国产三级国产aⅴ9色| 国产精品久久久久久久久粉嫩av| 亚洲美女视频网| 日本高清+成人网在线观看| 久久综合伊人77777蜜臀| 91精品国产91久久久久久最新| 色悠久久久久综合先锋影音下载| 久久视频免费在线播放| 亚洲免费影视第一页| 精品视频一区在线视频| 国产成人精品av在线| 亚洲欧美国产一区二区三区| 欧美视频在线观看免费网址| 91精品久久久久久| 高潮白浆女日韩av免费看| 欧美午夜片欧美片在线观看| 久久99精品国产99久久6尤物| 国产精品视频久久| 国产精品一区二区三区久久| 久久韩剧网电视剧| 欧美午夜宅男影院在线观看| 欧美激情奇米色| 国产综合在线观看视频| 亚洲成色999久久网站| 国产99久久久欧美黑人| 日韩av在线影视| 色综合久久精品亚洲国产| 国产精品久久久久久久久久三级| 91wwwcom在线观看| 久久欧美在线电影| 亚洲美女黄色片| 欧美电影在线播放| 久久国产精品久久精品| 97在线观看免费高清| 成人xvideos免费视频| 国产亚洲精品成人av久久ww| 欧洲成人免费视频| 久久综合久久八八| 欧美成在线视频| 日本最新高清不卡中文字幕| 丝袜亚洲另类欧美重口| 亚洲香蕉伊综合在人在线视看| 久久99久久99精品免观看粉嫩| 国产精品美女www| 日韩在线免费视频| 亚洲一区二区免费在线| 九九九久久久久久| 97视频色精品| 欧美贵妇videos办公室| 欧美大学生性色视频| 亚洲欧美第一页| 国产精品欧美一区二区| 色伦专区97中文字幕| 久色乳综合思思在线视频| 欧美一区二粉嫩精品国产一线天| 国产欧美欧洲在线观看| 欧美在线观看网址综合| 国产日本欧美视频| 欧美一区二区大胆人体摄影专业网站| 国产欧美亚洲视频| 亚洲香蕉成视频在线观看| 亚洲一区二区三区四区视频| 超碰91人人草人人干| 久久中文字幕国产| 色综合91久久精品中文字幕| 中文字幕亚洲一区二区三区| 国产精品视频网站| 亚洲综合大片69999| 精品视频—区二区三区免费| 2019中文字幕免费视频| 欧美日韩精品在线视频| www.日韩欧美| 久久成人精品视频| 国产精品久久电影观看| 国产一区二区成人| 国产精品极品美女粉嫩高清在线| 亚洲精品资源美女情侣酒店| 欧美视频专区一二在线观看| 欧美高清一级大片| 日韩欧美中文在线| 欧美国产第二页| 欧美日韩免费网站| 欧美激情视频免费观看| 欧美丰满少妇xxxx| 国产精品专区一| 亚洲精品综合久久中文字幕| 欧美国产视频一区二区| 亚洲欧美日韩精品| 成人做爰www免费看视频网站| 成人免费午夜电影| 欧美日韩精品二区| 日韩精品亚洲精品| 97国产精品人人爽人人做| 亚洲网站在线播放| 国产日韩欧美日韩大片| 欧美在线观看www| 欧美激情精品久久久久久免费印度| 亚洲成人久久网| 欧美自拍视频在线观看| 日日狠狠久久偷偷四色综合免费| 欧美在线视频导航| 国产精品高潮呻吟久久av野狼| 日本道色综合久久影院| 日韩亚洲成人av在线| 亚洲女人被黑人巨大进入al| 国产精品久久二区| 国产91精品黑色丝袜高跟鞋| 欧美日本在线视频中文字字幕| 91中文精品字幕在线视频| 欧美自拍视频在线观看| 亚洲第一精品久久忘忧草社区| 国产精品丝袜白浆摸在线| 国产玖玖精品视频| 国产亚洲一区二区在线| 中文字幕在线看视频国产欧美在线看完整| 色一区av在线| 亚洲曰本av电影| www.亚洲免费视频| 91美女福利视频高清| 亚洲第一免费网站| 国产精品久久一区主播| 精品成人乱色一区二区| 国产ts人妖一区二区三区| 欧美美最猛性xxxxxx| 怡红院精品视频| 91精品国产九九九久久久亚洲| 久久精品国亚洲| 国产亚洲欧美日韩一区二区| 国产91精品高潮白浆喷水| 国内精品视频在线| 92看片淫黄大片欧美看国产片| 国产欧美一区二区三区四区| 久久久久久国产精品| 久久久久久亚洲精品不卡| 亚洲精品久久久久中文字幕欢迎你| 精品国内自产拍在线观看| 91久久精品美女高潮| 欧美最猛黑人xxxx黑人猛叫黄| 黑人极品videos精品欧美裸| 久久视频精品在线| 国产精品久久久久77777| 国产精品久久久久久久久久小说| 欧美精品成人91久久久久久久| 欧美视频在线观看免费网址| 黄色成人av在线| 久久精品国产亚洲精品2020| 91福利视频在线观看| 国产午夜精品一区二区三区| 欧美成人激情视频免费观看| 欧美午夜电影在线| 日韩极品精品视频免费观看| 精品久久在线播放| 黑人极品videos精品欧美裸| 色午夜这里只有精品| 国产日韩欧美在线| 国产精品久久久久久亚洲影视| 欧美色道久久88综合亚洲精品| 国产精品亚洲视频在线观看| 精品视频www|