Awk 和 Regular Expressions 應用

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 
  1. [0-9] 單一數字
  2. [a-z] 表示匹配單個小寫字母
  3. [A-Z]表示匹配單個大寫字母
  4. [a-zA-Z] 表示匹配單個字母
  5. [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/

留言

熱門文章