标签:正则表达式
1.常见相关概念
1.globbing: 文件名通配( *, ?, [], [^])
2.常用的文本处理工具:grep, egrep, sed, awk, vim, nginx
3.grep(全名:Global search REgular expression and Print out the line.)
4.文本搜索工具,根据用户指定的文本模式(正则表达元字符以及正常字符组合而成)对目标文件进行逐行搜索,显示能匹配到的行;
5.正则表达式(REGular EXPression REGEXP):是由元字符及正常字符所书写的模式,其中的元字符不表示字符本身的意义,而是用于表达控制或通配等功能;
6.基本正则表达式: grep
7.扩展正则表达式: grep -E, egrep
8. fgrep: fast, 不支持使用正则表达式
2.正则表达式的相关命令
1.grep命令
命令格式:grep [OPTIONS] PATTERN [FILE...]
过滤条件:以行为独立单位
模式(pattern):以正则表达式的元字符,以及正常字符组合而成
--color[=WHEN],其中WHEN=[auto,always,never]
eg1:#grep --color=auto "root" /etc/passwd
-o: 只显示被模式匹配到的内容
-i: ignore case,不区分字符大小写
-v: 显示不能够被模式匹配到的行
-E:使用扩展的正则表达式
-A #:显示被匹配到的行及下面#行
-B #:显示被匹配到的行及上面#行
-C #显示被匹配到的行、上面#行及下面#行
2. 基本正则表达式元字符:
1.字符匹配d
2.次数匹配(在期望匹配字符后面提供一个控制符,用于表达匹配其前面字符指定的次数)
3. 位置锚定
4. 单词锚定:由非特殊字符组成的连续的字符串
5. 分组:\(\) 与引用 :\#
【注意:分组中的模式,在某次的具体匹配过程中所匹配到的字符,可以被grep记忆】
(保存于内置的变量中,这些变量是\1, \2, ...),因此,还可以被引用)
\1: 引用,模式中自左而右,由第一个左括号以及与之对应的右括号中的模式所匹配到的内容;
\2: 引用 ,模式中自左右,由第二个左括号以及与之对应的右括号中的模式所匹配到的内容
eg1: "\(ab\(cd\)mn\) \1 \2"【表示:(ab(cd))ab(cd)】
eg2:“\(a.b\).*\1" 【表示a.b.*a.b,如:amb hello anb】
eg3:【 表示"\(l..e\).*\1",找出前面以l..e开头,后面同包含一个l..e的行】
He like his lover.
He like his liker.
She love her lover.
She love her liker.
eg4:【表示:\(.*\)\.mp3.*\1\.wvm,找出中间包含#.mp3,而后又有#.wvm(#与前相同)的行】
play.php?a.mp3?search?a.wmv
play.php?where.mp3?hello?when.wmv
相关练习:
1、显示/proc/meminfo文件中以大写或小写S开头的行;用两种方式;
# grep "^[sS]" /proc/meminfo
2、显示/etc/passwd文件中其默认shell为非/sbin/nologin的用户;
# grep -v "/sbin/nologin$" /etc/passwd | cut -d: -f1
3、找出/etc/passwd文件中的一位数或两位数;
# grep -o "\<[0-9]\{1,2\}\>" /etc/passwd
4、显示/boot/grub/grub.conf中以至少一个空白字符开头的行;
# grep "^[[:space:]]\+" /boot/grub/grub.conf
5、显示/etc/rc.d/rc.sysinit文件中以#开头,后面跟至少一个空白字符,而后又有至少一个非空白字符的行;
#grep "^#[[:space:]]+[[:space:]]+" /etc/rc.d/rc.sysinit
6、打出netstat -tan命令执行结果中以‘LISTEN’后或跟空白字符结尾的行;
# netstat -tan | grep "LISTEN[[:space:]]*$"
【注意:以‘LISTEN’后或跟空白字符结尾,“或”意味着LISTEN后面有空白字符或没有空白字符】
7、添加用户bash, testbash, basher, nologin (此一个用户的shell为/sbin/nologin),而后找出当前系统上其用户名和默认shell相同的用户的信息;
# useradd bash
# useradd testbash# useradd basher# useradd -s /sbin/nologin nologin
# grep "^\([[:alnum:]]\+\>\).*\1$" /etc/passwd
2.扩展的正则表达式:
1.egrep命令
命令格式:egrep [OPTIONS] PATTERN [FILE...]
过滤条件:以行为独立单位
模式(pattern):以正则表达式的元字符,以及正常字符组合而成
--color[=WHEN],其中WHEN=[auto,always,never]
-o: 只显示被模式匹配到的内容
-i: ignore case,不区分字符大小写
-v: 显示不能够被模式匹配到的行
-E:使用扩展的正则表达式
-A #:显示被匹配到的行及下面#行
-B #:显示被匹配到的行及上面#行
-C #显示被匹配到的行、上面#行及下面#行
2. 基本正则表达式元字符
1. 字符匹配(与grep用法一样)
2.次数匹配:
3.位置锚定:
4.分组:( ) && 引用:\1, \2, ... && 或者: a|b【a或者b, 或者两侧的所有内容】
相关练习:
1、显示/proc/meminfo文件中以大写或小写S开头的行;用三种方式;
# grep -E "^[sS]" /proc/meminfo 或
# grep -E "^(s|S)" /proc/meminfo 或
# egrep -i "^s" /proc/meminfo
2、显示/etc/passwd文件中其默认shell为非/sbin/nologin的用户;
# egrep -v "/sbin/nologin$" /etc/passwd | cut -d: -f1
3、显示/etc/passwd文件中其默认shell为/bin/bash的用户;
# egrep "/bin/bash$" /etc/passwd | cut -d: -f1
4、找出/etc/passwd文件中的一位数或两位数;
# egrep --color=auto "\<[0-9]{1,2}\>" /etc/passwd 或
5、显示/etc/rc.d/rc.sysinit文件中以#开头,后面跟至少一个空白字符,而后又有至少一个非空白字符的行;
# egrep "^#[[:space:]]+[^[:space:]]+" /etc/rc.d/rc.sysinit
6、添加用户bash, testbash, basher, nologin (此一个用户的shell为/sbin/nologin),而后找出当前系统上其用户名和默认shell相同的用户的信息;
# egrep "^([[:alnum:]]+\>).*\1$" /etc/passwd
7、显示当前系统上root、fedora或user1用户的默认shell;
# grep -E "^(root|fedora|user1)\>" /etc/passwd | cut -d: -f7 或
# egrep "^(root|fedora|user1)\>" /etc/passwd | cut -d: -f7
8、找出/etc/rc.d/init.d/functions文件中某单词后面跟一组小括号的行,形如:hello();
# grep -E "\<[[:alnum:]]+\>\(\)" /etc/rc.d/init.d/functions 或
# egrep "\<[[:alnum:]]+\>\(\)" /etc/rc.d/init.d/functions
9、使用echo命令输出一个绝对路径,使用grep取出其基名;
扩展:取出其路径名
# echo /etc/rc.d/init.d/functions | grep -o -E "[[:alnum:]]+/?$" | cut -d/ -f1
# echo /etc/passwd/rcd/function/s | egrep -o "[[:alnum:]]+/?$"10、找出ifconfig命令结果中的1-255之间数字;
# ifconfig | grep -E "\<([1-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\>"
本文出自 “Jason” 博客,请务必保留此出处http://10037618.blog.51cto.com/10027618/1627831
标签:正则表达式
原文地址:http://10037618.blog.51cto.com/10027618/1627831