基本正则表达式和扩展正则表达式
基本正则表达式元字符:
字符匹配:
.:任意单个字符
[]:指定范围内的任意单个字符
[0-9],[[:digit: ]]
[a-z], [[:lower:]]
[A-Z],[[:upper:]]
[[:alpha:]]
[[:alnum:]]
[[:space:]]
[[:punct:]]
[^]:指定范围外的任意单个字符
次数匹配:用来指定匹配其前面的字符的次数
*:任意次
例子:x*y,xxy,xy,y,
.*:匹配任意长度的任意字符
\?:0次或1次
x\?y,xy,y,xxy
贪婪模式:尽可能长的去匹配字符:
\{m\}:匹配m次
\{m,n\}:m到n次
\{m,\}:至少m次;
\{0,n\}:至多n次;
位置锚定:用于指定字符出现的位置
^:锚定行首
^Char
$:锚定行尾
char$
^$:空白行
\
char\>:锚定词尾,char\b
分组:
\(\)
\(ab\)*xy
引用:
\1:后向引用,引用前面的第一个左括号以及与之对应的右括号中的模式所匹配到的内容
\2
...
grep 常用选项:
-v:反向,显示不能被模式所匹配到的行:
-o:仅显示被模式匹配到的子串,而非整行:
-i:不区分字符大小写,ignore-case
-E:支持扩展的正则表达式
-A #
-B #
-C #
egrep:使用扩展正则表达式来构建模式,相当于grep -E
元字符:
字符匹配:
.:任意单个字符
[]:指定范围内的任意单个字符
[^]:指定范围外的任意但单个字符
次数匹配:
*: 匹配其前面的字符任意次
?: 匹配其前面的字符0或1次
+:匹配其前面的字符至少1次
{m}:匹配其前面的字符m次
{m,n}: 至少m次,至多n次
{m,}: 至少m次
{0,n}: 至多n次
锚定:
^: 行首
$: 行尾
\<, \b:词首
\>, \b:词尾
分组:
(): 分组
|: 或者, ac|bc
grep -E "con(C|c)at"
conC或cat
1、在/etc/rc.d/rc.sysinit文件中匹配以R来头中间是任意的两个单个字符以t结尾的行
[root@localhost ~]# grep 'B..t' /etc/rc.d/rc.sysinit
# Boot time profiles. Yes, this should be somewhere else.
2、匹配在/etc/passwd文件里,以r开头中间跟上两个任意的字符,以t结尾的行
[root@localhost ~]# grep 'B..t' /etc/rc.d/rc.sysinit
# Boot time profiles. Yes, this should be somewhere else.
[root@localhost ~]# grep --color=auto 'r..t' /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
3、以大写R或者小写r开头,大写T或者小写t结尾,中间跟着两个任意字符的行
[root@localhost ~]# grep --color=auto '[Rr]..[Tt]' /etc/passwd
root:x:0:0:
root:/
root:/bin/bash
operator:x:11:0:operator:/
root:/sbin/nologin
ftp:x:14:50:FTP User:/va
r/ftp:/sbin/nologin
4、以大写R或者小写r开头,大写T或者小写t结尾,中间跟着任意长度任意字符的行
[root@localhost ~]# grep --color=auto '[Rr].*[Tt]' /etc/passwd
root:x:0:0:root:/root:/bin/bash
ope
rator:x:11:0:operator:/root:/sbin/nologin
ftp:x:14:50:FTP Use
r:/var/ftp:/sbin/nologin
vcsa:x:69:69:vi
rtual console memory owner:/dev:/sbin/nologin
ab
rt:x:173:173::/etc/abrt:/sbin/nologin
saslauth:x:499:76:"Saslauthd use
r":/var/empty/saslauth:/sbin/nologin
postfix:x:89:89::/va
r/spool/postfix:/sbin/nologin
sshd:x:74:74:P
rivilege-separated SSH:/var/empty/sshd:/sbin/nologin
postg
res:x:26:26:PostgreSQL Server:/var/lib/pgsql:/bin/bash
op
rofile:x:16:16:Special user account to be used by OProfile:/home/oprofile:/sbin/nologin
5、以大写R或者小写r开头,大写T或者小写t结尾,中间跟着任意长度任意字符并且中间不能有标点符号的行
[root@localhost ~]# grep --color=auto '[Rr][^[:punct:]]*[Tt]' /etc/passwd
root:x:0:0:
root:/
root:/bin/bash
ope
rator:x:11:0:ope
rator:/
root:/sbin/nologin
vcsa:x:69:69:vi
rtual console memory owner:/dev:/sbin/nologin
ab
rt:x:173:173::/etc/ab
rt:/sbin/nologin
sshd:x:74:74:Privilege-sepa
rated SSH:/var/empty/sshd:/sbin/nologin
oprofile:x:16:16:Special use
r account to be used by OProfile:/home/oprofile:/sbin/nologin
6、以大写R或者小写r开头并且位于行首,大写T或者小写t结尾,中间跟着任意长度任意字符并且中间不能有标点符号的行
[root@localhost ~]# grep --color=auto '^[Rr][^[:punct:]]*[Tt]' /etc/passwd
root:x:0:0:root:/root:/bin/bash
7、查看/etc/passwd下面以bash结尾的行
8、查找统计/etc/rc.d/rc.sysinit文件中的空白行的行数
[root@localhost ~]# grep '^$' /etc/rc.d/rc.sysinit |wc -l
96
9、编辑一个文本文件grep.txt
[root@localhost ~]# cat grep.txt
xy
xxy
xxxxxxxxxxxxxxxxxy
abxy
a6bxya7b
a6bxya6b
y
10、引用前面括号里出现的内容
[root@localhost ~]# grep --color=auto '\(a.b\)xy\1' grep.txt
a6bxya6b
11、编辑grep.txt文件,加入下面的内容
[root@localhost ~]# cat grep.txt
xy
xxy
xxxxxxxxxxxxxxxxxy
abxy
a6bxya7b
a6bxya6b
y
He like his lover.
She love her liker.
He love his lover.
She like her liker.
12、查找以l开头中间跟两个字符以e结尾后面跟任意字符,再以l开头中间跟任意两个字符,再以er结尾的行
13、匹配前面是love后面就是lover,前面是like后面就是liker的行
14、显示被模式匹配的下一行,使用-A选项
阅读(1287) | 评论(0) | 转发(0) |