正则表达式匹配不可见字符
时间:2010-06-27 来源:kangle000
在文本中,文字符号分为3种,如表:
普通文字符号 A到Z ,a到z,数字0到9,以及不是元字符的其他符号(比如:#、=)
元字符 12个被保留做特殊用途的符号:[]\^.|?*+(){}
不可见字符 \cx 匹配由 x 指明的控制字符。例如,/cM 匹配一个Control-M或回车符。x 的值必须是A~Z 或 a~z 之一。否则,讲c视为一个原义的"c"字符
\f 匹配一个换页符。等价于 \x0c 和 \cL
\f 匹配一个换行符。等价于 \x0a 和 \cJ
\r 匹配一个回车符。等价于 \x0d 和 \cM
\s 匹配任何空白字符,包括空格、制表符、换页符等等。等价于[\f\n\r\t\v]
\S 匹配任何非空白字符。等价于 [^\f\n\r\t\v]
\t 匹配一个制表符。等价于 \x09 和 \cI
\v 匹配一个垂直制表符。等价于 \x0b 和 \cK
对于元字符,由于它们在正则表达式中有特殊的用途,所以如果字符串中有和元字符相同的字符,那么要用反斜杠“\”来进行转义。比如下面例中,由于“?”号是元字符,所以要匹配问号时,要加上反斜杠转义。
对于不可见字符的匹配:有一个err文件,其内容如下
例如:$ cat -v err
168158.784523 1993024434 3396788324 63375 53 h^A^L.hit.edu.cn. 1 0 1 1
cat利用-v选项显示不可见字符,本例中为^A^L,即ascii码的\001\014,则可以用一下命令匹配。
$cat err|awk '{if( $6 ~ /\f/) {print $0}}'
168158.784523 1993024434 3396788324 63375 53 h
.hit.edu.cn. 1 0 1 1
cat err|awk '{if( $6 ~ /\014/) {print $0}}'
168158.784523 1993024434 3396788324 63375 53 h
.hit.edu.cn. 1 0 1 1
cat err|awk '{if( $6 ~ /\x0c/) {print $0}}'
168158.784523 1993024434 3396788324 63375 53 h
.hit.edu.cn. 1 0 1 1