shell編程系列16--文本處理三劍客之awk模式匹配的兩種方法 awk的工做模式 第一種模式匹配:RegExp 第二種模式匹配:關係運算匹配 用法格式對照表 語法格式 含義 RegExp 按正則表達式匹配 關係運算 按關係運算匹配awk模式匹配用法總結: 第一種方法:RegExp 第二種方法:運算符匹配 1、RegExp 匹配/etc/passwd文件行中含有root字符串的全部行 awk 'BEGIN{FS=":"}/root/{print $0}' passwd 匹配/etc/passwd文件行中以nginx開頭的全部行 awk '/^nginx/{print $0}' passwd 2、運算符匹配 關係運算符匹配: < 小於 > 大於 <= 小於等於 >= 大於等於 == 等於 != 不等於 ~ 匹配正則表達式 !~ 不匹配正則表達式 (1)、以:爲分隔符,匹配/etc/passwd文件中第3個字段小於50的全部行信息 awk 'BEGIN{FS=":"}$3<50{print $0}' passwd (2)、以:爲分隔符,匹配/etc/passwd文件中第3個字段大於50的全部行信息 awk 'BEGIN{FS=":"}$3>50{print $0}' passwd (3)、以:爲分隔符,匹配/etc/passwd文件中第7個字段爲/bin/bash的全部行信息 awk 'BEGIN{FS=":"}$7=="/bin/bash"{print $0}' passwd (4)、以:爲分隔符,匹配/etc/passwd文件中第7個字段不爲/bin/bash的全部行信息 awk 'BEGIN{FS=":"}$7!="/bin/bash"{print $0}' passwd (5)、以:爲分隔符,匹配/etc/passwd文件中第3個字段包含3個數字以上的全部行信息 awk 'BEGIN{FS=":"}$3 ~ /[0-9]{3,}/{print $0}' passwd 布爾運算符匹配: || 或 && 與 ! 非 (1)、以:爲分隔符,匹配/etc/passwd文件中包含ftp或mail的全部行信息 awk 'BEGIN{FS=":"}$1=="ftp" || $1=="mail"{print $0}' passwd (2)、以:爲分隔符,匹配/etc/passwd文件中第3個字段小於50而且第4個字段大於50的全部行信息 awk 'BEGIN{FS=":"}$3<50 && $4>50{print $0}' passwd # 模式匹配 # 沒有使用 /RegExp/ 匹配模式的時候處理全部的行,使用了匹配模式就只處理匹配到的行 [root@localhost shell]# awk 'BEGIN{FS=":"}/^nginx/{print $0}' passwd nginx:x:997:995:Nginx web server:/var/lib/nginx:/sbin/nologin # 關係運算符,uid 等於1的行 [root@localhost shell]# awk 'BEGIN{FS=":"}$3==1{print $0}' passwd bin:x:1:1:bin:/bin:/sbin/nologin [root@localhost shell]# awk 'BEGIN{FS=":"}$7=="/bin/bash"{print $0}' passwd root:x:0:0:root:/root:/bin/bash ajie:x:1000:1000:ajie:/home/ajie:/bin/bash deploy:x:1001:1001::/home/deploy:/bin/bash # 匹配uid爲3位及以上的行 [root@localhost shell]# awk 'BEGIN{FS=":"}$3~/[0-9]{3,}/{print $0}' passwd systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin polkitd:x:999:998:User for polkitd:/:/sbin/nologin ajie:x:1000:1000:ajie:/home/ajie:/bin/bash chrony:x:998:996::/var/lib/chrony:/sbin/nologin deploy:x:1001:1001::/home/deploy:/bin/bash nginx:x:997:995:Nginx web server:/var/lib/nginx:/sbin/nologin # 正則匹配nginx開頭的行 [root@localhost shell]# awk 'BEGIN{FS=":"}$1~/^nginx/{print $0}' passwd nginx:x:997:995:Nginx web server:/var/lib/nginx:/sbin/nologin # 匹配到 /sbin/nologin 的行,注意轉義 [root@localhost shell]# awk 'BEGIN{FS=":"}$0~/\/sbin\/nologin/{print $0}' passwd bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin mail:x:8:12:mail:/var/spool/mail:/sbin/nologin operator:x:11:0:operator:/root:/sbin/nologin games:x:12:100:games:/usr/games:/sbin/nologin ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin nobody:x:99:99:Nobody:/:/sbin/nologin systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin dbus:x:81:81:System message bus:/:/sbin/nologin polkitd:x:999:998:User for polkitd:/:/sbin/nologin sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin postfix:x:89:89::/var/spool/postfix:/sbin/nologin chrony:x:998:996::/var/lib/chrony:/sbin/nologin nginx:x:997:995:Nginx web server:/var/lib/nginx:/sbin/nologin # 沒有匹配到/sbin/nologin 的行 [root@localhost shell]# awk 'BEGIN{FS=":"}$0!~/\/sbin\/nologin/{print $0}' passwd root:x:0:0:root:/root:/bin/bash sync:x:5:0:sync:/sbin:/bin/sync shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown halt:x:7:0:halt:/sbin:/sbin/halt ajie:x:1000:1000:ajie:/home/ajie:/bin/bash deploy:x:1001:1001::/home/deploy:/bin/bash # 運算和模式匹配混用,找出 uid 小於50,且bash爲 /bin/bash 的行 [root@localhost shell]# awk 'BEGIN{FS=":"}$3<50 && $7~/\/bin\/bash/ {print $0}' passwd root:x:0:0:root:/root:/bin/bash