区分通配符与正则表达式:

正则表达式仅支持三剑客+vi,(sed、awk、grep、vi),其他命令无法使用。文件名--通配符,文件内容--正则表达式。

通配符:大部分命令都支持(ls、find、cp、mv、mkdir等),用于查找文件或目录。

正则表达式:是用来匹配字符串的,针对文本内容过滤处理。

通配符:

通配符只有4种:*、?、[]、{}

* 0或多个任意字符,

? 1个任意字符,

[ ] 任一、范围内的任意1个字符

        [0-9] 任意1个数字

        [a-z,A-Z,0-9] 任意字母或数字(逗号可省略)

        [a-z] 任意小写字母

        [A-Z] 任意大写字母

        [a-Z] 任意大写或小写字母

[^] 除范围内任意单个字符

        [^0-9] 除数字任意单个字符

        [^a-z] 除小写字母外任意单个字符

        [^A-Z] 除大写字母外任意单个字符

        [^a-zA-Z0-9]

{} 展开

        a{b,c,d}z abz acz adz

[[:upper:]] 任意大写字母 [[:lower:]] 任意小写字母

[[:alpha:]] 任意大小写字母 [[:digit:]] 任意数字

[[:alnum:]] 任意字母或数字 [[:blank:]] 水平空白字符

[[:space:]] 水平或垂直空白字符 [[:punct:]] 标点符号

[[:print:]] 可打印字符 [[:cntrl:]] 控制(非打印)字符

[[:graph:]] 图形字符 [[:xdigit:]] 十六进制字符

特殊字符:$、|、<、>、&、{}、()、#、!、等 转义字符:\

正则表达式:

BRE:只有^、$、.、[]、*

ERE:在BRE基础上增加了+、?、|、()、{}等字符

基本正则表达式BRE

Vi、grep都是基础正则表达式

.  :   任意单个字符(除换行符) grep -n “g..d” 1.sh

* :   前一个字符出现0次或连续多次 grep -n “oo*” 1.sh 匹配至少1个o

.* :   任意字符

^ :   以xx字符开头

$  :   以xx字符结尾

^$ :   空行

^.* : 以任意字符开头

.*$ : 以任意字符结尾

[]  :   范围内任意1个字符,如[abc],[a-z]

[^a-z]:   除范围内的任意1个字符

^[^#] 非#开头的

扩展正则表达式ERE

grep -E、sed -r、awk都用扩展正则表达式。

扩展正则增加了+、?、|、()、{}

+ : 前一个字符出现1次或多次,相当于BRE的\+

        [:/]+ 冒号或/1次或多次

? : 前一个字符出现0次或1次,相当于BRE的\?

        go?d                 gd god

| : 或,同时过滤多个字符串

         g(oo|la)d        good glad

( ) : 分组过滤匹配,相当于BRE的\(\),()内条件整体向后引用。如\1,代表()中匹配到的字符love  

{}: 重复匹配前1个字符次数,与BRE的\{n,m\}功能相同

        a{n,m} : 匹配a至少n次,最多m次。

        a{n,}: 匹配a至少n次

        a{n}: 匹配a正好n次

        a{,m}: 匹配n最多m次

3、转义字符

\ : 转义字符,BRE只有^、$、.、[]、*,其他都认为是普通字符。

ERE只有^、$、.、[]、*、+、?、()、{}、|、其他都认为是普通字符。

特殊字符转译为普通字符

                \$、\^、

普通字符转译为元字符

                \(..\)、\{\}、\<、\>、\|、

\w :字母数字下划线 \W :除字母数字下划线

\d :一个数字 \D :一个非数字。相当于[^0-9]

\n :一个换行符 \r :一个回车符

\t :一个tab符

\s :任何空白字符,空格,tab,换页符等 \S :非空白字符

\+  : 1个或多个前一个字符,相当于ERE的+

\?  : 0个或1个前一个字符,相当于ERE的?

\| :或,相当于ERE的|

x\{n,m\} : 区间表达式,前面单个字符重现的次数。\{n\}重现n次;\{n,m\}重现n至m次;\{n,\}至少重现n次

\(...\) : 分组过滤匹配,()内当作一个整体向后引用,如\(ab\).*\1cd  ,  \1  \2代表()内的内容,最多\9

\<:左闭合,其后面的字符必须作为单词的首部出现

\>:右闭合,其前面的字符必须作为单词的尾部出现

grep “root\>” 1.sh结果:xxroot、 grep “\

grep “\” 1.sh 结果:root

grep '^love' 1.txt #过滤以love开头的行

grep 'love$' 1.txt #过滤以love结尾的行

grep 'l..e'  1.txt #过滤l开头+任意2个字符+e结尾的行

grep ‘oo*’ 1.txt #过滤o+0个或多个o的行

grep ' *love' 1.txt #过滤0个多个空格+love的行

grep '[Ll]ove' 1.txt #过滤love或Love的行

grep '[A-Z]ove' 1.txt #过滤大写字母+ove的行

grep '[^A-Z]' 1.txt #过滤非大写字母的行

grep '^$' 1.txt #空行

grep '.*' 1.txt #任意字符

grep 'o\{2,4\}' 1.txt #o重复2-4次

grep -E "go+d" 1.txt #g接1次或多次0接d

grep -E "gd|good" 1.txt #gd或good

grep -E "g(la|oo)d" 1.txt #glad或good

grep -E "g(la|oo)d|g(rr|ee)d" 1.txt #glad、good、grrd、geed

精彩文章

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: