正则表达式之――grep
正则表达式定义: 使用一类元字符(不表示本身意义,而表示通配或其它意义),组合其他字符,所描述出来的,能能够匹配符合条件的字符 正则表达式的分类: 基本正则表达式:grep 扩张正则表达式:egrep 基本正则表达式元字符集和及其意义 扩展正则表达式元字符集和及其意义 grep 的选项及其意义 grep支持字符和字符集合 正则表达式举例说明: (1) 查找/etc/passwd 中以root开头的行 [root@localhost /]# grep "^root" /etc/passwd root:x:0:0:root:/root:/bin/bash [root@localhost /]# (2) 查找/etc/passwd 中以“/bin/bash”结尾的行 [root@localhost /]# grep "/bin/bash$" /etc/passwd root:x:0:0:root:/root:/bin/bash mandriva:x:4004:501::/home/mandriva:/bin/bash mysql:x:495:2004::/home/mysql:/bin/bash [root@localhost /]# (3)查找/etc/passwd中以r开头以h结尾中间任意字符的行 [root@localhost /]# grep "^r.*h$" /etc/passwd root:x:0:0:root:/root:/bin/bash [root@localhost /]# (4)查找/etc/passwd中包括ro或者root的行(使用{1,2}p) [root@localhost /]# grep "ro{1,2}" /etc/passwd root:x:0:0:root:/root:/bin/bash operator:x:11:0:operator:/root:/sbin/nologin rtkit:x:499:497:RealtimeKit:/proc:/sbin/nologin [root@localhost /]# (5)查找/etc/passwd 中精确匹配rpc的行 <rpc> [root@localhost /]# grep "rpc" /etc/passwd 查找rpc的行 rpc:x:32:32:Rpcbind Daemon:/var/cache/rpcbind:/sbin/nologin rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin [root@localhost /]# grep "<rpc>" /etc/passwd 精确匹配rpc的行 rpc:x:32:32:Rpcbind Daemon:/var/cache/rpcbind:/sbin/nologin [root@localhost /]# (6)显示/proc/meminfo文件中以不区分大小的s开头的行; [root@localhost /]# grep "[Ss]" /proc/meminfo Buffers: 47272 kB SwapCached: 0 kB SwapTotal: 2097144 kB SwapFree: 2097144 kB AnonPages: 43056 kB Shmem: 252 kB Slab: 97532 kB SReclaimable: 71464 kB SUnreclaim: 26068 kB KernelStack: 1400 kB PageTables: 4736 kB NFS_Unstable: 0 kB Committed_AS: 154500 kB VmallocUsed: 276328 kB AnonHugePages: 2048 kB HugePages_Total: 0 HugePages_Free: 0 HugePages_Rsvd: 0 HugePages_Surp: 0 Hugepagesize: 2048 kB [root@localhost /]# 或者使用 grep -i 选项 (7)显示/var/log/secure文件中包含“Failed password”或“FAILED LOGIN”的行; [root@localhost /]# grep -E "Failed password | FAILED LOGIN" /var/log/secure Jul 14 14:01:52 localhost sshd[2950]: Failed password for root from 172.16.254.22 port 57650 ssh2 [root@localhost /]#( (8)在cat.sh中使用(|)搜索cat,Cat (9)在/proc/meminfo中查找以S开头后面跟一个字符的行[root@localhost /]# grep "^S." /proc/meminfo SwapCached: 0 kB SwapTotal: 2097144 kB SwapFree: 2097144 kB Shmem: 252 kB Slab: 97544 kB SReclaimable: 71468 kB SUnreclaim: 26076 kB [root@localhost /]# grep "^S..b" /proc/meminfo Slab: 97536 kB [root@localhost /]# 10)使用-o选项只是显示匹配到的字串,而不是整行 正则表达式与grep选项配合使用举例: 1). 显示/etc/rc.d/rc.sysinit中以#开头,且后面跟一个或多个空白字符,而后又跟了任意非空白字符的行; [root@localhost /]# grep "^#[[:space:]]{1,}[^[:space:]]" /etc/rc.d/rc.sysinit # /etc/rc.d/rc.sysinit - run once at boot time # Taken in part from Miquel van Smoorenburg's bcheckrc. # Check SELinux status # Print a text banner. # Only read this once. # Initialize hardware # Set default affinity # Load other user-defined modules # Load modules (for backward compatibility with VARs) # Configure kernel parameters # Set the hostname. # Sync waiting for storage. 2).显示/etc/rc.d/rc.sysinit中符合形为“任意单个字符n任意字符任意单个字符n”模式的行;即任意单个字符后面跟了个n,n后面有任意长度的任意字符,而后是任意单个字符后面跟了个n [root@localhost /]# grep --color=auto ".n.*.n" /etc/rc.d/rc.sysinit # /etc/rc.d/rc.sysinit - run once at boot time # Taken in part from Miquel van Smoorenburg's bcheckrc. HOSTNAME=$(/bin/hostname) if [ -f /etc/sysconfig/network ]; then . /etc/sysconfig/network if [ -z "$HOSTNAME" -o "$HOSTNAME" = "(none)" ]; then if [ ! -e /proc/mounts ]; then mount -n -t proc /proc /proc mount -n -t sysfs /sys /sys >/dev/null 2>&1 3).显示/etc/rc.d/rc.sysinit中符合形为“任意单个字符n任意字符任意单个字符n”模式的行;即任意单个字符后面跟了个n,n后面有任意长度的任意字符,而后是任意单个字符后面跟了个n,但后面的n之前的字符要与前面的n之前的字符相同; [root@localhost /]# grep --color=auto "(.n).*1" /etc/rc.d/rc.sysinit # Taken in part from Miquel van Smoorenburg's bcheckrc. mount -n -o remount /dev/shm >/dev/null 2>&1 if [ -e "/selinux/enforce" ] && [ "$(cat /proc/self/attr/current)" != "kernel" ]; then if [ -r "/selinux/enforce" ] ; then echo $"*** Warning -- SELinux is active" echo $"*** Disabling security enforcement for system recovery." echo $"*** Run 'setenforce 1' to reenable." 4).查看电话号码 [root@localhost /]# cat > phone.txt << EOF 0511-440533 0212-7878909 0313-99797780 23937974320432840324894820 EOF [root@localhost /]# grep -E "[0-9]{3}-[0-9]{8}|[0-9]{4}-[0-9]{7}" phone.txt 0212-7878909 0313-99797780 [root@localhost /]# 5).匹配邮件地址 [root@localhost /]# cat > email.txt << EOF > 903U948HH@qq.com > wejojodffslf@126.com > 3joefjowfmfj@163.com > dfk;dkf;f;;wkererm > EOF [root@localhost /]# grep -E "w+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*" email.txt 903U948HH@qq.com wejojodffslf@126.com 3joefjowfmfj@163.com [root@localhost /]# 总结: 1、* # ? 的比较: *:匹配其前一个字符0次或多次 #:匹配其前一个字符1次或多次 ?:匹配其前一个字符0次或1次 2、‘’ “” ``的比较: “”:弱引用,可以实现变量替换 '':强引用,不替换,而显示字符本身; ``:命令引用,``<--->$() (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |