[Linux] Regular Expression

正则表达式符号表示

[:alnum:]  英文大小写及数字,即0-9,A-Z,a-z
[:alpha:] 任何英文大小写字符,即A-Z,a-z
[:blank:] 空格与[Tab]按键
[:cntrl:] 键盘上的控制按键,即包括CR, LF, Tab, Del..等
[:digit:] 数字,0-9
[:graph:] 除了空格符(空格键与Tab按键)外的其他所有按键
[:lower:] 小写字符,a-z
[:print:] 任何可以被打印出来的字符
[:punct:] 标点符号,即: " ' ? ! ; : # $ ...
[:upper:] 大写字符,A-Z
[:space:] 任何会产生空白的字符,包括空格键,[Tab],CR等等
[:xdigit:] 16位进制的数字类型,包括0-9,A-F,a-f的数字与字符

 

RE字符 意义与范例
^word  

意义:待搜寻的字符串word在行首

范例:搜寻行首为#开始的那一行,并列出行号

grep -n '^#' a.txt

word¥  

意义:带搜寻的字符串word在行尾

范例:将行尾为!的那一行打印出来,并列出行号

grep -n '!$' a.txt

.    

意义:代表【一定有一个任意字符】的字符

范例:搜寻的字符串可以是(eve)(eae)(eee)(e e),但不能仅有(ee)!亦即e与e中间一定仅有一个字符

grep -n 'e.e' a.txt

\    

意义:转义字符,将特殊符号的特殊意义去除

范例:搜寻含有单引号‘的那一行

grep -n \' a.txt

*    

意义:重复零个到无穷多个的前一个RE字符

范例:找出含有(es)(ess)(esss)等等的字符串,注意,因为*可以是0个,所以es也是符合带搜寻字符串。另外,因为*为重复【前一个RE字符】的符号,因此,在*之前必须要紧接着一个RE字符,例如任意字符串为【。*】

grep -n 'ess*' a.txt

[list]  

意义:字符集合的RE字符,里面列出想要获取的字符

范例:搜寻含有gl或gd的那一行,需要特别注意的是,在[]当中【谨代表一个待搜寻的字符】例如【a[afl]y】代表搜寻的字符串可以是aay, afy, aly即[afl]代表a或f或l的意思

grep -n 'g[ld]' a.txt

[n1-n2]  

意义:字符集合的RE字符,里面列出想要获取的字符范围

范例:搜寻含有任意数字的那一行,需特别注意,在字符集合[]中的减号-是有特殊意义的,他代表两个字符之间的所有连续字符!但这个连续与否与ASCII编码有关,因此,你的编码需要在设定正确

grep -n '[A-Z] a.txt

[^list]  

意义:字符集合的RE字符,里面列出不要的字符串或范围

范例:搜寻的字符串可以是(oog)(ood)但不能是(oot),那个^在[]内时,代表的意思是反向选择

grep -n 'oo[^t]' a.txt

\{n,m\}  

意义:连续n到m个的【前一个RE字符】

意义:若为\{n\}则是连续n个的前一个RE字符

意义:若是\{n,\}则是连续n个以上的前一个RE字符

范例:在g与g之间有2个到3个的o存在的字符串,即(goog){gooog}

grep -n 'go\{2,3\}g' a.txt

posted @ 2017-09-26 17:09  immjc  阅读(279)  评论(0编辑  收藏  举报