正则表达式和通配符的本质区别
- 不需要思考的判断方法:在三剑客awk,sed,grep,egrep都是正则,其他都是通配符
2.区别通配符和正则表达式最简单的方法:
(1)文件目录名===>通配符
(2)文件内容(字符串,文本【文件】内容)===>正则表达式
注意:在匹配模式中一定要加上引号
符号 | 描述 | 实例 | 备注 |
. | 匹配任意单个字符(必须存在) | l..e可以表示love、like、leee等,但不可以表示labcde、le、lee等。 | cat /etc/passwd |grep “r..t” |
^ | 匹配前面字符串开头 | 匹配以abc开头的行:echo -e “abc\nxyz” |grep ^anc | cat /etc/passwd |grep “^set” |
$ | 匹配前面字符串结尾 | 匹配以xyz结尾的行:echo -e “abc\nxyz” |grep xyz$ | cat /etc/pssswd |grep “bash$” |
* | 匹配前一个字符的零个或多个 | a*表示出现任意个a的情况 a*b表示 b前面有任意个a的情况(包括没有a的情况) | cat /etc/passwd |grep “ro*t” 结果:既有root也有rt |
.* | 表示任意长度的任意字符 | a.*b表示ab之间有无数个点(.) | cat /etc/passwd |grep “a.*b” |
+(扩展正则) | 表示其前面的字符出现最少一次的情况 | 匹配 abc 和 abcc: echo -e "abc\nabcc\nadd" |grep -E 'ab+' 匹配单个数字:echo "113" |grep -o '[0-9]' 连续匹配多个数字:echo "113" |grep -E -o '[0-9]+'
|
|
?(扩展正则) | 表示其前面的字符出现最多一次的情况(可以0个) | 匹配 ac 或 abc: echo -e "ac\nabc\nadd" |grep -E 'a?c'
| |
[] | 表示范围内的任意一个字符 | 匹配所有字母 echo -e "a\nb\nc" |grep '[a-z]'
|
|
[^] | 匹配中括号之外的任意一个字符 | 匹配所有字母 echo -e "a\nb\nc" |grep '[a-z]'
|
|
^[^] | 匹配不是中括号内任意一个字符开头的行 | 匹配不是#开头的行: grep '^[^#]' /etc/httpd/conf/httpd.conf
| |
{n}或者{n,} | 匹配花括号前面字符至少n个字符 | echo "aadadccc" | egrep "a{2}" echo "aadadccc" | egrep "a{1}"
| |
{n,m} | 匹配花括号前面字符至少 n个字符,最多 m 个字符 | "ac\{2,5\}b" 匹配a和b之间有最少2个c最多5个c的行 "ac\{,5\}b" 匹配a和b之间有最多5个c的行 "ac\{2,\}b" 匹配a和b之间有最少2个c的行
|
|
\< | 锚定单词首部(单词一般以空格或特殊字符做分隔) | #echo" hi,root,iamroot" | grep "\<root" | |
\> | 锚定单词尾部(单词一般以空格或特殊字符做分隔,) | #echo "hi,root,iamroot" | grep "root\>" | |
() | \1 调用前面的第一个分组 | 例子:过滤出一行中有两个相同数字的行 # grep "\([0-9]\).*\1"
| |
|(扩展正则) | 匹配竖杠两边的任意一个 | 例子:过滤出cat 或者Cat # grep "cat|Cat" a.txt # grep "(C|c)at" a.txt
|
|
注意:1.正则表达式中的{}以及()都需要加上\进行转义,而扩展正则表达式不需要。
2.|, ?,+是扩展正则独有的
3.锚定单词首部和尾部在扩展正则以及正则中都需要加上\
[:space:] | 匹配任意空白字符,等效\t\n\r\f\v |
注意:使用这些字符的时候需要在外面还要加一个[]括号