设为首页 收藏本站
查看: 1391|回复: 0

正则表达式与shell通配符

[复制链接]

尚未签到

发表于 2018-8-21 07:56:13 | 显示全部楼层 |阅读模式
  一、何为正则表达式
  正则表达式是自定义的,linux文本工具(如grep,sed)用来过滤文本的模式模板,linux工具能够在数据流向工具时对数据进行正则表达式模式匹配,数据能匹配模式则会被接受进行下一步处理(如显示、删除、替代等)。正则表达式在shell和linux中的地位非常重要,透过正则表达式强大的字符串处理能力,我们可以从大量的数据中快速检索出仅符合需要的数据进行分析,由此给工作带来极大的便利
  二、正则表达式的分类
  正则表达式包括基本正则表达式(basic regular expression,简称BRE)和扩展正则表达式(ERE)两类,扩展正则表达式除了可以做简单的一组字串处理之外,还可以做群组的字串处理,如搜索china或america或england的搜索。大多数linux工具都至少符合基本正则表达式的规范。
  三、正则表达式的语法
  1、特殊字符
  .:匹配任意单个字符
  [ ]:匹配指定范围内的任意单个字符
  [:alnum:]:代表英文大小写字符及数字,即a-z,A-Z,0-9
  [:alpha:]:代表英文大小写字符,即a-z,A-Z
  [:upper:]:代表英文大写字符,即A-Z
  [:lower:]:代表英文小写字符,即a-z
  [:digit:]:代表数字,即0-9
  [:space:]:代表空白字符
  [:punct:]:所有的标点符号
  [^]:匹配指定范围之外的任意单个字符,如[^0-9]或[^[:digit:]]表示数字之外的任意单个字符
  *:表示它前面的字符可以出现任意次
  \?:表示它前面的字符可以出现1次或0次
  \+:表示它前面的字符出现至少1次
  \{m\}:表示它前面的字符要出现m次
  \{m,n\}:表示它前面的字符出现至少m次,至多n次
  \{m,\}:表示它前面的字符出现至少m次
  \{0,n\}:表示它前面的字符出现至多n次
  .*:表示任意长度的任意字符
  2、位置锚定符
  ^:行首锚定,即要搜索的字串必须位于行首
  $:行尾锚定
  ^$:空白行,同^[[:space:]]*$
  \:词尾锚定
  3、分组和引用
  \(\):分组,例如\(ab\)*表示ab可以出现任意次,分组中的模式匹配到的内容,可由正则表达式引擎记忆在内存中,之后可被引用
  注意:反斜线为转义字符
  \#:引用第#个括号所匹配到的内容,而非模式本身。
  例如 abcmnabc匹配\(ab\?c\).*\1,而abcmnac不匹配
  4、扩展正则表达式的特殊说明
  ?:表示它前面的字符可以出现1次或0次(不同于基本正则表达式)
  +:表示它前面的字符出现至少1次
  {m}:精确匹配m次
  {m,n}:至少m次,至多n次
  {m,}:至少m次
  {0,n}:至多n次
  锚定符与基本正则表达式相同
  分组:( )    引用:\#
  或者:a|b,表示或者b。注意:conC|cat表示conC或者cat而非conCcat或者conccat
  四、grep及egrep
  grep(global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能使用正则表达式对目标文件进行逐行搜索,并把匹配的行打印出来。egrep则是使用扩展正则表达式语法搜索文本的工具。
  使用方法:grep [option]…… "PATTERN" FILE
  常用选项:
  -i:忽略字符大小写
  -v:反向选取
  -o:仅显示匹配的字串,而非字串所在的行
  -q:静默模式
  --color=auto:将搜索匹配到的字串标示颜色
  -A#:after,除了显示匹配行之外,也显示匹配行的后#行
  -B#:before,除了显示匹配行之外,也显示匹配行的前#行
  -C#或-#:除了显示符合匹配到的行之外,也显示该行之前后的#行内容
  -E:使用扩展正则表达式,相当于egrep
  -n:在显示符合范本样式的那一行之前,标示出该行的编号
  -c: 计数
  五、grep使用示例
  1、显示/etc/passwd文件中以bash结尾的行
[root@localhost ~]# grep "bash$" /etc/passwd  
root:x:0:0:root:/root:/bin/bash
  
wittgenstein:x:500:500:wittgenstein:/home/wittgenstein:/bin/bash
  2、显示/etc/passwd文件中的两位数或三位数
[root@localhost ~]# grep -o "\" /etc/passwd  
12
  
10
  
14
  
11
  
12
  
100
  
13
  
...
  3、显示`netstat -tan`命令结果中以‘LISTEN’后跟0个、1个或者多个空白字符结尾的行
[root@localhost ~]# netstat -tan | grep "LISTEN[[:space:]]*$"  
tcp        0      0 0.0.0.0:111                 0.0.0.0:*                   LISTEN
  
tcp        0      0 0.0.0.0:22                  0.0.0.0:*                   LISTEN
  
tcp        0      0 127.0.0.1:631               0.0.0.0:*                   LISTEN
  
...
  4、添加用户bash、testbash、basher以及nologin用户(nologin用户的shell为/sbin/nologin);而后找出/etc/passwd文件中用户名与其shell名相同的行
[root@localhost ~]# grep "^\([[:alnum:]]\+\):.*/\1$" /etc/passwd  
sync:x:5:0:sync:/sbin:/bin/sync
  
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
  
halt:x:7:0:halt:/sbin:/sbin/halt
  
bash:x:501:501::/home/bash:/bin/bash
  
nologin:x:504:504::/home/nologin:/sbin/nologin
  5、显示当前系统上root、centos或者user1用户的默认shell和UID (请事先创建这些用户,若不存在)
[root@localhost ~]# grep -E "^root:|^centos:|^user1:" /etc/passwd | cut -d: -f3,7  
0:/bin/bash
  
505:/bin/bash
  
506:/bin/bash
  6、找出/etc/rc.d/init.d/functions文件中某单词(单词中间可以存在下划线)后面跟着一组小括号的行
[root@localhost ~]# grep "\()" /etc/rc.d/init.d/functions | grep "\

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-554454-1-1.html 上篇帖子: shell 批量更改文件或目录名 下篇帖子: shell练习-sort排序详解
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表