What are Regular Expressions?
一個正則表達式最重要的事情是,他們讓你篩選命令或文件的輸出,編輯文本或配置文件等的部分。
Regular Expression 的特徵
- Ordinary characters如:space,_, A-Z, a-z, 0-9
- Meta characters延伸了Ordinary characters包含:
- (.)它匹配除換行符之外的任何單個字符。
- (*)它匹配其前面的直接字符的零個或多個存在。
- [ character(s) ]它匹配字符中指定的任何一個字符,還可以使用( - )字符表示一系列字符如[a-d]、[6-9]
- (^)它匹配文件中一行的開頭字串。
- ($)匹配文件中的行尾字串。
- (\)它是一個轉義字符。如[\.]就是.、[\/]就是/
awk的一般語法是
# awk 'script' filename
'script'是'/ pattern / action'的形式,其中pattern是一個正則表達式。
AWK範例
[root@awk ~]# awk '//{print}' /var/log/yum.log
印出文件 /var/log/yum.log 中的每行
[root@awk ~]# awk '//{print}' /var/log/yum.log
Nov 18 04:25:28 Updated: 12:dhcp-common-4.1.1-51.P1.el6.centos.i686
Nov 18 04:25:33 Updated: kernel-firmware-2.6.32-642.6.2.el6.noarch
Nov 18 04:25:37 Updated: tzdata-2016i-1.el6.noarch
Nov 18 04:25:38 Updated: ncurses-base-5.7-4.20090207.el6.i686
Nov 18 04:25:38 Updated: centos-release-6-8.el6.centos.12.3.i686
[root@awk ~]# awk '/ICMP/{print}' /etc/protocols
awk將匹配在 /etc/protocols 文件中具有ICMP的行。
[root@awk ~]# awk '/ICMP/{print}' /etc/protocols
icmp 1 ICMP # internet control message protocol
ipv6-icmp 58 IPv6-ICMP # ICMP for IPv6
[root@awk ~]# awk '/m.p/{print}' /etc/protocols
將符合
m.p給印出來。
[root@awk ~]# awk '/m.p/{print}' /etc/protocols
udp 17 UDP # user datagram protocol
idpr-cmtp 38 IDPR-CMTP # IDPR Control Message Transport Proto
vmtp 81 VMTP # Versatile Message Transport
secure-vmtp 82 SECURE-VMTP # SECURE-VMTP
mtp 92 MTP # Multicast Transport Protocol
scc-sp 96 SCC-SP # Semaphore Communications Sec. Pro.
gmtp 100 GMTP # GMTP
以上只顯示部分答案,剩的可以找找看。
[root@awk ~]# awk '/m*p/{print}' /etc/sysctl.conf
將符合m*p給印出來。
一個p或多個p都打印出來。
[root@awk ~]# awk '/m*p/{print}' /etc/sysctl.conf
# Use '/sbin/sysctl -a' to list all possible parameters.
# Controls IP packet forwarding
net.ipv4.ip_forward = 0
net.ipv4.conf.default.rp_filter = 1
# Do not accept source routing
net.ipv4.conf.default.accept_source_route = 0
# Controls whether core dumps will append the PID to the core filename.
# Useful for debugging multi-threaded applications.
kernel.core_uses_pid = 1
net.ipv4.tcp_syncookies = 1
# Controls the maximum number of shared memory segments, in pages
使用Awk設定 [character]
[root@awk ~]# awk '/[AiCGx]/{print}' /etc/sysconfig/network-scripts/ifcfg-eth0
把有 A or i or C or G or x 都給打印出來
[root@awk ~]# awk '/[AiCGx]/{print}' /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
HWADDR=00:0C:29:00:C4:F8
NM_CONTROLLED=yes
[root@awk ~]# awk '/[Oo]T/{print}' /etc/sysconfig/network-scripts/ifcfg-eth0
把匹配以O或o開頭的字串,後跟T的給打印出來。
[root@awk ~]# awk '/[Oo]T/{print}' /etc/sysconfig/network-scripts/ifcfg-eth0
ONBOOT=yes
BOOTPROTO=dhcp
指定範圍中的Characters
- [0-9] 單一數字
- [a-z] 表示匹配單個小寫字母
- [A-Z]表示匹配單個大寫字母
- [a-zA-Z] 表示匹配單個字母
- [a-zA-Z 0-9] 表示匹配單個字母或數字
[root@awk etc]# awk '/[0-9]/{print}' /etc/haproxy/haproxy.cfg
至少包含一個數字[0-9]都給打印出來。
[root@awk etc]# awk '/[0-9]/{print}' /etc/haproxy/haproxy.cfg
# http://haproxy.1wt.eu/download/1.4/doc/configuration.txt
# 1) configure syslog to accept network log events. This is done
# 2) configure local2 events to go to the /var/log/haproxy.log
# local2.* /var/log/haproxy.log
log 127.0.0.1 local2
maxconn 4000
tune.ssl.default-dh-param 2048
option forwardfor except 127.0.0.0/8
retries 3
timeout http-request 10s
timeout queue 1m
#只擷取一小部分
使用Awk和(^)字符
[root@awk etc]# awk '/^TY/{print}' /etc/sysconfig/network-scripts/ifcfg-eth0
把開頭為TY打印出來
[root@awk etc]# awk '/^TY/{print}' /etc/sysconfig/network-scripts/ifcfg-eth0
TYPE=Ethernet
ex2:
[root@awk etc]# awk '/^Add/{print}' /etc/httpd/conf/httpd.conf
把Add開頭打印出來,大小寫有差。
[root@awk etc]# awk '/^Add/{print}' /etc/httpd/conf/httpd.conf
AddIconByEncoding (CMP,/icons/compressed.gif) x-compress x-gzip
AddIconByType (TXT,/icons/text.gif) text/*
AddIconByType (IMG,/icons/image2.gif) image/*
AddIconByType (SND,/icons/sound2.gif) audio/*
AddIconByType (VID,/icons/movie.gif) video/*
AddIcon /icons/binary.gif .bin .exe
AddIcon /icons/binhex.gif .hqx
AddIcon /icons/tar.gif .tar
AddIcon /icons/world2.gif .wrl .wrl.gz .vrml .vrm .iv
AddIcon /icons/compressed.gif .Z .z .tgz .gz .zip
AddIcon /icons/a.gif .ps .ai .eps
AddIcon /icons/layout.gif .html .shtml .htm .pdf
AddIcon /icons/text.gif .txt
AddIcon /icons/c.gif .c
#只擷取一小部分
使用Awk和($)字符
[root@awk etc]# awk '/lly$/{print}' /etc/httpd/conf/httpd.conf
把結尾是lly打印出來。
[root@awk etc]# awk '/lly$/{print}' /etc/httpd/conf/httpd.conf
BrowserMatch "Microsoft Data Access Internet Publishing Provider" redirect-carefully
BrowserMatch "MS FrontPage" redirect-carefully
BrowserMatch "^WebDrive" redirect-carefully
BrowserMatch "^WebDAVFS/1.[0123]" redirect-carefully
BrowserMatch "^gnome-vfs/1.0" redirect-carefully
BrowserMatch "^XML Spy" redirect-carefully
BrowserMatch "^Dreamweaver-WebDAV-SCM1" redirect-carefully
使用Awk與(\)轉義字符
[root@awk ~]# awk '//{print}' a.txt
今天花費$25.00元
麵包$15.0元
麥香奶茶$10.0元
信箱 s123456@ksu.edu.cc
(###謝謝###)
以上為a.txt內容
[root@awk ~]# awk '/$25.00/{print}' a.txt
[root@awk ~]# awk '/\$25.00/{print}' a.txt
[root@awk ~]# awk '/\$[0-9]/{print}' a.txt
[root@awk ~]# awk '/[0-9]\@/{print}' a.txt
[root@awk ~]# awk '/\(*#/{print}' a.txt
以上輸出結果:
今天花費$25.00元
今天花費$25.00元
麵包$15.0元
麥香奶茶$10.0元
信箱 s123456@ksu.edu.cc
(###謝謝###)
(###謝謝###)
以上僅供參考,如有疑問可留言
參考來源:http://www.tecmint.com/
留言
張貼留言