正则表达式及grep

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了正则表达式及grep相关的知识,希望对你有一定的参考价值。

一、正则表达式

正则表达式 Regular Expression ,简称REGEXP,用来检索、替换某些符合某个模式的文本。
正则表达式元字符有:

    . :匹配任意单个字符
    [] :匹配指定范围内的单个字符
    [^] :匹配指定范围外的 单个字符
    字符集和有(可以使用man grep查看):[:alnum:], [:alpha:], [:cntrl:], [:digit:],  [:graph:],  [:lower:],   [:print:],   [:punct:],   [:space:],   [:upper:],   [:xdigit:]

匹配次数(贪婪模式匹配尽可能多的)

    * :匹配前面的字符任意次数
    ? :匹配前面的字符一次或0次
    {m,n} :匹配前面的字符至少m次,最多n次
            列如有字符:a,b,ab,abb,aab,axb,amnb,那么a*b,a?b,a.*b会匹配到的字符串有:
            a*b(表示a可以出现任意次可以没有,后面接字符b) :b, ab,abb,aab,axb,amnb
            a?b(表示a可以出现一次或0次,后面接字符b,问号要转义) :b,ab,abb,aab,axb,amnb
            a.*b(表示ab之间可以有任意字符):ab,abb,aab,axb,amnb
            a{1,3}b(表示a最少出现1次,最多出现3次):ab,abb,aab
            (以上使用grep测试得出)

位置锚定,即匹配指定位置出现的字符串

    ^ :锚定行首,后面出现的字符串只能在行首出现
    $:锚定行尾,后面出现的字符串只能在行尾出现
    ^$:匹配空白行
    <或 :其后面出现的字符必须作为单词的首部出现
    >或 :其后面出现的字符必须作为单词的尾部出现

分组:
():一般和1,2,3一起使用

二、grep

grep:根据模式搜索,并将模式的文本行显示出来
用法:grep [OPTIONS] PATTERN [FILE...]
PATTERN:是文本字符和元字符组合而成的匹配条件
常用参数:
-i :忽略大小写
-o :仅显示匹配到的字符串
-v:取反,显示匹配到的以外的字符串
--color:将匹配到的字符串显示颜色
例如:

    新建grep.txt文本,内容如下:
    she like his liker.
    he love she also love.
    he like his lover.
    1.列出符合 l..e 的行(l和e之间占任意两个字符)

技术分享图片

    2.只显示匹配到的字符串 -o

技术分享图片

    3.忽略大小写匹配 -i

技术分享图片

    4.取反 -v

技术分享图片

    5.显示/proc/meminfo文件中以不区分大小的s开头的行;       
    grep -i ‘^s‘ /proc/meminfo
    grep ‘^[sS]‘ /proc/meminfo

    6.显示/etc/passwd中以nologin结尾的行; 
    grep ‘nologin$‘ /etc/passwd

    7.取出默认shell为/sbin/nologin的用户列表
    grep "nologin$‘ /etc/passwd | cut -d: -f1

    8.取出默认shell为bash,且其用户ID号最小的用户的用户名
    grep ‘bash$‘ /etc/passwd | sort -n -t: -k3 | head -1 | cut -d: -f1

    9.显示/etc/inittab中以#开头,且后面跟一个或多个空白字符,而后又跟了任意非空白字符的行;
    grep "^#[[:space:]]{1,}[^[:space:]]" /etc/inittab

    10.显示/etc/inittab中包含了:一个数字:(即两个冒号中间一个数字)的行;
    grep ‘:[0-9]:‘ /etc/inittab

    11.显示/boot/grub/grub.conf文件中以一个或多个空白字符开头的行;
    grep ‘^[[:space:]]{1,}‘ /boot/grub/grub.conf

    12.显示/etc/inittab文件中以一个数字开头并以一个与开头数字相同的数字结尾的行;
    grep ‘^([0-9]).*1$‘ /etc/inittab

    13.找出/proc/cpuinfo文件中的,1位数,或2位数;
    grep ‘[0-9]{1,2}‘ /proc/cpuinfo (找出满足有一位或两位数字的行)
    grep --color ‘<[0-9]{1,2}>‘ /proc/cpuinfo (找出满足有一位或两位数字的行,且这数字只能是一个单词)

    14.查找当前系统上名字为student(必须出现在行首)的用户的帐号的相关信息, 文件为/etc/passwd
    grep ‘^student>‘ /etc/passwd 
    或者 id student

三、其它

正则表达式用法很灵活,较复杂,更多的用法上百度查找。
正则表达式和通配符的区别,不要搞混淆了,想了解通配符查看“bash及其特性“文档。

以上是关于正则表达式及grep的主要内容,如果未能解决你的问题,请参考以下文章

正则表达式和grep用法,及文本查看处理工具

grep文本查看工具及正则表达式

正则表达式及grep

grep及正则表达式

grep及正则表达式

grep命令及正则表达式