正则表达式就是处理字符串的方法(已行为单位)。
Linux系统中,语系对正则表达式的使用是有影响的。就编码顺序而言,当LANG=C时:0-9A-Za-z;当LANG=zh_CN时:0-9aA-zZ。这一差异使得正则表达式在使用“[n1-n2]”时会出现问题。
符号表示:在不确定语系或是不方面更改语系时,建议使用这种表示符号代替[n1-n2]的使用方式,以免发生错误。
[:alnum:]:英文大小写字母以及数字。
[:alpha:]:英文大小写字母。
[:digit:]:数字。
[:lower:]:小写字母。
[:upper:]:大写字母。
[:blank:]:空格键或TAB键。
[:cntrl:]:键盘上面的控制键,包括CR,LF,TAB,Del等。
[:graph:]:除了空格键和TAB键以外的所有按键。
[:print:]:可以被打印出来的字符。
[:punct:]:标点符号。
[:space:]:会产生空白的字符,包括TAB等。
[:xdigit:]:十六进制的数字类型。
正则表达式的符号:暂时与grep命令(笔记7中介绍过)连用,用作筛选。
^word:^字符表示行首,即word字符在行首出现。如:grep -n '^the' test 表示显示test文件中行首为the的行。(-n 参数是显示行编号)
word$:$字符表示行尾,即word字符在行尾出现。如:grep -n '\.$' test 表示显示test文件中行尾为“.”的行。
\:转义字符
.:代表一个确定存在的任意字符。如:grep -n 't.st' test 表示显示test文件中含有“t*st”的行,*可以是任意字符,但必须存在,不能是“tst”。
*:代表0到无穷多个前一个字符。如:grep -n 'tes*t' test 表示显示test文件中含有“te(s)t”的行,其中字符s可以是任意数量的。
[list]:代表从字符集合中选择一个字符。如:grep -n 'te[asdf]t' test 表示显示test文件中含有“teat”、“test”、“tedt”、“teft”的行。
[n1-n2]:代表在范围内选取一个字符。如:grep -n 'te[a-z]t' test 表示显示test文件中含有“te(S)t”的行,其中字符S可以是小写字母中的任意一个。注意:这种用法最好在LANG=C的语系中使用。
[^list]:代表从不在字符集合中的一个字符。如:grep -n 'te[asdf]t' test 表示显示test文件中含有含有“te(s)t”的行,其中不包括含有“teat”、“test”、“tedt”、“teft”的行。
\{n,m\}:本意为{m,n},但在bash中“{”和“}”是有特殊含义的字符,因此要用\转义字符进行转义。表示:连续n到m个前一个字符,如果m缺省,则表示n到无穷多个;如果m和逗号都缺省,则表示n个前一个字符。如: grep -n 'tes\{1,3\}t' test 表示显示test文件中含有“test”、“tesst”、“tessst”的行。
扩展正则表达式:配合egrep使用,或者grep -E。
+:重复一个或一个以上的前一个字符。
?:重复零个或一个的前一个字符。
|:用或的方式找出数个字符串。如:egrep -n 'test|at' test 表示显示test文件中含有“test”或“at”的行。
():找出组字符串。如:egrep -n 'g(la|oo)d' test 表示显示test文件中含有“glad”或“good”的行。
()+:多个重复组的判别。如egrep -n 'A(test)+B' test 表示显示test文件中以A开头,以B结尾,中间含有一个或一个以上“test”的字符串的所在行。