正则表达式

   正则表达式由一些普通字符和一些元字符metacharacters)组成。普通字符包括大小写的字母和数字,而元字符则具有特殊的含义,我们下面会给予解释。

 

在最简单的情况下,一个正则表达式看上去就是一个普通的查找串。例如,正则表达式"testing"中没有包含任何元字符,它可以匹配"testing""123testing"等字符串,但是不能匹配"Testing"。接下来我们列出元字符:

 

字符匹配类

 

.:匹配任意单个字符

[]:匹配指定范围内的任意单个字符

[^]:匹配指定范围外的任意单个字符

字符集合:[:digit:] [:alpha:] [:punct:] [:lower:] [:upper:] [:space:] [:alnum:]

 

匹配次数类

*:匹配其前面的字符任意次

.*:任意长度的任意字符

\?:匹配其前面的字符串1次或0

\{m,n\}:匹配其前面的至少m次,至多n

\{1,\}:最少一次

 

位置锚定类

^:行首

$:行尾

^$:空白行

\<:单词首

\>:单词尾

\<\>

 

分组类

\(\):

向后引用

\1:引用第一个左括号以及与之对应的右括号所包括的所有内容

 

接下来看几个例子

最简单的元字符是点,它能够匹配任何单个字符(注意不包括换行符)。假定有个文件test.txt包含以下几行内容:

he is arat

he is in a rut

the food is Rotten

I like root beer

匹配以r开始以t结尾,中间任意一个字符的字符串,如下图匹配到rat和rut

[root@centos6 ~]# grep --color 'r.t' /tmp/test2.txt
he is arat
he is in a rut

匹配以r或R开始以t结尾,中间任意一个字符的字符串,如下图匹配到rat,rut和Rot

[root@centos6 ~]# grep --color '[Rr].t' /tmp/test2.txt
he is arat
he is in a rut
the food is Rotten

匹配以he为行首的行

[root@centos6 ~]# grep --color '^he' /tmp/test2.txt
he is arat
he is in a rut

假定有个文件a.txt如下:

 

a
b
ab
aab
acb
adb
amnb

匹配以b结尾,前面匹配任意次a的字符串

[root@centos6 ~]# grep 'a*b' /tmp/a.txt
b
ab
aab
acb
adb
amnb

匹配以a开头,中间任意长度的字符串,以b结尾的字符串

[root@centos6 ~]# grep 'a.*b' /tmp/a.txt
ab
aab
acb
adb
amnb

匹配a0次或者1次,以b结尾的字符串

[root@centos6 ~]# grep --color 'a\?b' /tmp/a.txt
b
ab
aab
acb
adb
amnb

匹配a最少1次,最多3次,以b结尾的字符串

[root@centos6 ~]# grep --color 'a\{1,3\}b' /tmp/a.txt
ab
aab

匹配以a开头,中间1个到3个任意字符,以b结尾的字符串

查找/etc/fstab中有多少空白行

[root@centos6 ~]# grep '^$' /etc/fstab |wc -l
1

 

 查找/etc/inittab文件中包含任意一个数字,然后还以这个数字结尾的行

 

 显示/boot/grub/grub.conf文件中以一个或多个空白符开头的行

 [root@centos6 ~]# grep '^[[:space:]]\{1,\}' /boot/grub/grub.conf 

root (hd0,0)
kernel /vmlinuz-2.6.32.71 ro root=/dev/mapper/vg_centos6-lv_root rd_NO_LUKS rd_NO_MD rd_LVM_LV=vg_centos6/lv_swap crashkernel=auto LANG=zh_CN.UTF-8 rd_LVM_LV=vg_centos6/lv_root KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet
initrd /initramfs-2.6.32.71.img
root (hd0,0)
kernel /vmlinuz-2.6.32-573.18.1.el6.x86_64 ro root=/dev/mapper/vg_centos6-lv_root rd_NO_LUKS rd_NO_MD rd_LVM_LV=vg_centos6/lv_swap crashkernel=auto LANG=zh_CN.UTF-8 rd_LVM_LV=vg_centos6/lv_root KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet
initrd /initramfs-2.6.32-573.18.1.el6.x86_64.img
root (hd0,0)
kernel /vmlinuz-2.6.32-573.el6.x86_64 ro root=/dev/mapper/vg_centos6-lv_root rd_NO_LUKS rd_NO_MD rd_LVM_LV=vg_centos6/lv_swap crashkernel=auto LANG=zh_CN.UTF-8 rd_LVM_LV=vg_centos6/lv_root KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet
initrd /initramfs-2.6.32-573.el6.x86_64.img
显示/proc/cpuinfo文件中d的一位数或两位数

找出ifconfig命令结果中的ip地址

 ifconfig | egrep -o '(\<([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\>\.){3}\<([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\>'

查找当前系统上名字为student(必须出现在行首)的用户的账号的相关信息,文件为/etc/passwd

[root@centos6 rc.d]# grep '^wangkun\>' /etc/passwd |cut -d: -f3
500

扩展正则表达式:

字符匹配

.:

[]

[^]

次数匹配:

*

+:匹配其前面的字符至少一次

{m,n}

锚定字符

^

$

\<

\>

分组

():分组

\1,\2,\3

或者

|: or

C|cat 

 

转载于:https://www.cnblogs.com/wangyi429111/p/8301127.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值