文章标题

语系数据对正则表达式的影响
在英文大小写的编码顺序中,zh_CN.big5及c这两种语系的输出结果分别如下
LANG=c时:0 1 2 3 4……….A B C D………Z a b c d ……z
LANG=zh_CN时:0 1 2 3 4 ….a A b B c C ….z Z
上面的顺序是编码顺序,我们可以很清楚的发现这两中语系的编码顺序是不一样的
如果你想选择大写字符而使用[A-Z]时,会发现LANG=c确实可以找到大写字符(因为是连续的),但如果使用LANG=zh_CN.gb2312时,就会发现连同b-z小写字母也会被选出来
所以使用正则表达式时,需要特别留意当时环境的语系为何,否则可能会发现与别人不想同的选取结果

为了避免这样的编码所造成的英文与数字的选取问题,需要记住以下的一些特殊的符号
[: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
[:printt:] 代表任何可以被打印出来的字符
[:punct:] 代表标点符号
[:upper:] 代表大写字符,即A-Z
[:space:] 任何会产生空白的字符,包括tab与CR等
[:xdigit:] 代表十六进制的数字类型
尤其是[:alnum:] [:alpha:] [:upper:] [:lower:] [:digit:]这几个一定要知道代表什么意思

基础正则表达式字符
^word
意义:带查找的字符串在行首
范例: 查找行首为#开始的那一行,并列出行号
grep -n ‘^#’ filename

word grepn ’ filename

.(小数点)
意义:代表一定有一个任意字符的字符
范例:查找的字符串可以是eve ,eae,eee但不能仅有ee即e与e之间一定仅有一个字符,而空格符也是字符
grep -n ‘e.e’ filename

\
意义:转意字符,将特殊符号的特殊意义去除
范例:查找含有单个引号的那一行
grep -n \‘ filename

*
意义:重复零个到无穷个前一个字符
范例:找出含有es,ess,esss等的字符串。
grep -n ‘ess*’ filename

[list]
意义:list字符集的任意一个字符
范例:查找含有gl或gd的那一行
grep -n ‘g[ld]’ filename
另:a[afl]y 代表查找的字符串可以是aay,afy,aly

[n1-n2]
意义:n1-n2的字符范围
范例:查找含有任意数字的那一行。需要特别留意,在字符集合[]中的减号-是有特殊意义的,它代表含有任意数字的那一行。需要特别留意,在字符集合[]中的减号-是有特殊意义的,它代表两个字符之间的所有连续字符。但这个连续字符与否与ascii编码有关,因此,你的编码需要设置正确

[^list]
意义:找出不要的字符串或范围
范例:查找的字符串可以是oog,ood,但不能是oot
grep -n ‘oo[^t]’ filename

{n,m}
意义:连续n到m个的前一个字符,若为{n}则是连续n个前一个字符,若为{n,}
则是连续n个以上的前一个字符
范例:在g与g之间有2到3个的o存在的字符串
grep -n ‘go{2,3}g’ filename

扩展的正则表达式
grep默认仅支持基础的正则表达式,如果要使用扩展的正则表达式可以使用grep -E,也可以使用egrep
+
意义:重复一个或一个以上的前一个字符
范例:查找god,good,goood等的字符
egrep -n ‘go+d’ filename

?
意义:零个或一个的前一个字符
范例:查找gd或god两个字符串
Egrep -n ‘go?d’ filename

|
意义:用或的方式找出数个字符串
范例:查找gd或good这两个字符串。
egrep -n ‘gd|good’ filename
()_
意义:找出‘组’字符串
范例:查找glad或good这两个字符串
Egrep -n ‘g(la|oo)d’ filename
()+
意义:多个重复组的判别
范例:在文件中查找类似A开头C结尾,中间有一个以上xyz的字符串
egrep ‘A(xyz)+C’

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值