加入收藏 | 设为首页 | 会员中心 | 我要投稿 安卓应用网 (https://www.0791zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 程序设计 > 正文

正则表达式之――grep

发布时间:2020-05-23 15:23:53 所属栏目:程序设计 来源:互联网
导读:正则表达式定义: 使用一类元字符(不表示本身意义,而表示通配或其它意义),组合其他字符,所描述出来的,能能够匹配符合条件的字符 正则表达式的分类: 基本正则表达式:grep 扩张正则表达式:egrep 基本正则表达式元字符集和及其意义 符号 意义 * 匹配紧挨

正则表达式定义:

使用一类元字符(不表示本身意义,而表示通配或其它意义),组合其他字符,所描述出来的,能能够匹配符合条件的字符

正则表达式的分类:

基本正则表达式: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

正则表达式之――grep

(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


正则表达式与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、‘’ “” ``的比较:

“”:弱引用,可以实现变量替换

'':强引用,不替换,而显示字符本身;

``:命令引用,``<--->$()

(编辑:安卓应用网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读