正则表达式及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测试得出)

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

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

分组:
\(\):一般和\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之间占任意两个字符)

正则表达式及grep

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

正则表达式及grep

    3.忽略大小写匹配 -i

正则表达式及grep

    4.取反 -v

正则表达式及grep

    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及其特性“文档。

猜你喜欢

转载自blog.51cto.com/13803030/2134242