正则表达式
正则表达式分类:
正则表达式:REGEXP,REGular EXPression。
正则表达式分为两类:
Basic REGEXP(基本正则表达式)
Extended REGEXP(扩展正则表达式)
。基本正则表达式
//元字符
. //任意单个字符
[] //匹配指定范围内的任意单个字符
[^] //匹配指定范围外的任意单个字符
//匹配次数(贪婪模式)
* //匹配其前面的任意单个字符任意次
.* //任意长度的任意字符
\? //匹配其前面的任意单个字符1次或0次
\+ //匹配其前面的任意单个字符至少1次
\{m,n\} //匹配其前面的任意单个字符至少m次,至多n次
//位置锚定
^ //锚定行首,此字符后面的任意单个字符必须出现在行首
$ //锚定行尾,此字符前面的任意单个字符必须出现在行尾
^$ //空白行
\<或\b //锚定词首,其后面的任意单个字符必须作为单词首部出现
\>或\b //锚定词尾,其前面的任意单个字符必须作为单词尾部出现
/分组
\(\)
例:\(ab\)*
//后向引用
\1 //引用第一个左括号以及与之对应的右括号所包括的所有内容
\2 //引用第二个左括号以及与之对应的右括号所包括的所有内容
//示例:
.
[root@localhost ~]# ls
abbbhc abc ac afshfo ajdfsc anaconda-ks.cfg sh
[root@localhost ~]# ls |grep "a.c"
abc
[]
[root@localhost zz]# ls
a c e g i k m o q s u w y
b d f h j l n p r t v x z
[root@localhost zz]# ls |grep "[abc]"
a
b
c
[^]
[root@localhost zz]# ls
a c e g i k m o q s u w y
b d f h j l n p r t v x z
[root@localhost zz]# ls |grep "[^a-x]"
y
z
*
[root@localhost zz]# ls
aaaaaab aaab aab aacc aae
[root@localhost zz]# ls |grep "a*"
aaaaaab
aaab
aab
aacc
aae
.*
[root@localhost zz]# ls
aaaaaab aaab aab aacc aae blodk
[root@localhost zz]# ls |grep "^a.*b"
aaaaaab
aaab
aab
\?
[root@localhost zz]# ls
aaaaaab aaab aab aacc aae
[root@localhost zz]# ls |grep "a\?b"
aaaaaab
aaab
aab
\+
[root@localhost zz]# ls
aaaaaab aaab aab aacc aa
[root@localhost zz]# ls |grep "a\+c"
aacc
\{m,n\}
[root@localhost zz]# ls
aaaaaab aaab aab aacc aae
[root@localhost zz]# ls |grep "a\{3,5\}"
aaaaaab
aaab
^
[root@localhost zz]# ls
aaaaaab aaab aab aacc aae blodk
[root@localhost zz]# ls |grep "^b"
blodk
$
[root@localhost zz]# ls
aaaaaab aaab aab aacc aae blodk
[root@localhost zz]# ls |grep "^a.*e$"
aae
\<和\>
[root@localhost zz]# ls
aaaaaab aaab aab aacc aae blodk
[root@localhost zz]# ls |grep "\<a.*e\>"
aae
\b
[root@localhost zz]# ls
aaaaaab aaab aab aacc aae blodk
[root@localhost zz]# ls |grep "\ba.*e\b"
aae
\(\)
例:\(ab\)*
//后向引用
\1 //引用第一个括号所包括的所有内容
\2 //引用第二个括号所包括的所有内容
[root@localhost zz]# echo "1 2 3"|sed 's#1\(.*\) \(.*\)#1 \2\1#g' //第一个.*代表2第二个.*代表3,使用'\'转义将\2也就是3放在前面\1也就是2放在后面,实现将1 2 3打印出来的效果是1 3 2
1 3 2
[root@localhost zz]#
。扩展正则表达式
sed和grep等默认使用的就是基本正则表达式,所以很多地方需要用到 ’ \ ’ 转义扩展正则不要使用转义
sed使用扩展正则使用sed -r
grep使用扩展正则使用grep -E 或egrep
//字符匹配
. //匹配任意单个字符
[] //匹配指定范围内的任意单个字符
[^] //匹配指定范围外的任意单个字符
//次数匹配
* //匹配其前面的任意单个字符任意次
? //匹配其前面的任意单个字符1次或0次
+ //匹配其前面的任意单个字符至少1次
{m,n} //匹配其前面的任意单个字符至少m次,至多n次
//位置锚定
^ //锚定行首,此字符后面的任意单个字符必须出现在行首
$ //锚定行尾,此字符前面的任意单个字符必须出现在行尾
^$ //空白行
\<或\b //锚定词首,其后面的任意单个字符必须作为单词首部出现
\>或\b //锚定词尾,其前面的任意单个字符必须作为单词尾部出现
//分组
() //分组
\1,\2,\3,....
例:(ab)*
//后向引用
\1 //引用第一个左括号以及与之对应的右括号所包括的所有内容
\2 //引用第二个左括号以及与之对应的右括号所包括的所有内容
//或者
| //or 默认匹配|的整个左侧或者整个右侧的内容
//例:C|cat表示C或者cat,要想表示Cat或者cat则需要使用分组,如(C|c)at
[root@localhost zz]# ls
cat Cat
[root@localhost zz]# ls|egrep "(C|c)at"
cat
Cat