设为首页 收藏本站
查看: 1173|回复: 1

[经验分享] 正则表达式和grep、sed工具

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-6-23 08:59:13 | 显示全部楼层 |阅读模式
what is 正则表达式
     一种处理字符的方法,只要命令工具(例:grep、sed、awk等)支持这种方法,就可以用来处理正则表达式字符串。通过特殊字符的帮助,我们就容易达到查找、删除、替换特定字符串的命令程序。
用途
     信息过滤,信息匹配,获取有用信息
常用的表达式含义
  • ^ 行首标记  #^haha,匹配以haha起始的行
  • $ 行尾标记
  • . 匹配任意单个字符
  • ? 匹配之前的项一次或0次  #blu?e 匹配blue或ble
  • + 匹配之前的项一次或多次
  • * 匹配之前的项0次或多次
  • [] 匹配包含在[]中的任意一个字符  #a[bc]d 匹配abd或acd
  • [^] 匹配除了[^]以外的任意一个字符  #a[^bc] 匹配ad、ae...
  • [-] 匹配[-]一段字符中的任意一个字符  #[1-9] 匹配1-9任意一个字符
  • () 创建一个用于匹配的子串  #ab(cde)?匹配ab或abcde
  • {n} 匹配之前的项n次  #[1-9]{3}相当于[1-9][1-9][1-9]
  • {n,} 之前的项至少匹配n次
  • {n,m} 之前的项匹配n-m次
  • | 匹配两边的任意一项  #(a | b) 匹配a或b
  • \ 转义
  • [:alnum:] 大小写英文和数字
  • [:alpha:] 大小写英文
  • [:digit:] 数字
  • [:lower:] 小写英文
  • [:upper:] 大写英文
  • [:blank:] TAB或空格
  • [:punct:] 标点符号


grep
grep [-n 行号] [-v 反选] [-A 输出后几行] [-B 输出前几行] [-C 输出前后几行] [-i 忽略大小写] [-o 打印匹配到的而不是整行] [-b 匹配到的字符偏移] [-l 搜索匹配文本在那个文件中] [-L 和-l相反] [-e 匹配多个] [-r或-R 递归搜索,可指定include和exclude] [-q 静默输出成功返回0] [--color=auto 颜色高亮]
  • 对于扩展正则表达式  + ?| () 需要使用grep -E或egrep使用
  • 例:截取dmesg的eth0信息,高亮显示,并显示前两行后三行,显示行号

wKiom1WHfnmSNAwHAAGiMzd6dNc671.jpg
  • 参数-o

wKioL1WHgDDjrSfqAAFx37DsG7Y029.jpg

  • 参数-b

wKiom1WHfnnjx9f-AAB_5lR8X54885.jpg

  • 参数-l和L

wKioL1WHgDCgi094AAB_G4973cc998.jpg

  • 参数-e

wKiom1WHfnqhfzLUAABWraLUgxs389.jpg

  • 参数-r和-R

wKiom1WHfnniIbJpAACj3w02MH0980.jpg

wKioL1WHgDDzLNW6AABPpI1W9dM744.jpg


PS:有时候因为语系的不同,用到类似[a-z]这样的表达式的时候会有错误,编码顺序不同导致的例如zh_CN.big5和C两种语系
  • LANG=C时:01234....ABCD..YZabcd....xyz
  • LANG=zh_CN :01234....aAbBcC....zZ

可用[:lower:]代替


sed:流编辑器 stream editor
     可以对数据进行:插入、删除、替换并打印到屏幕上,或进行直接写入,还可以进行部分数据查找替换、已匹配字符串标记和子串匹配标记
sed [-i 直接写入] [-e 连续操作] [-n 静默模式] ‘ 操作内容 ’
1:新增a,i   删除d   替换c   显示p,-n              //(根据行号)
  • [iyunv@boxin ~]# nl /etc/passwd | sed '2a hello'    // 第二行下面增加

     1     root:x:0:0:root:/root:/bin/bash
     2     bin:x:1:1:bin:/bin:/sbin/nologin
hello
     3     daemon:x:2:2:daemon:/sbin:/sbin/nologin
  • [iyunv@boxin ~]# nl /etc/passwd | sed '2i hello'    // 第二行上面增加

     1     root:x:0:0:root:/root:/bin/bash
hello
     2     bin:x:1:1:bin:/bin:/sbin/nologin

  • d
  • [iyunv@boxin ~]# nl /etc/passwd | sed '2,4d'    // 删 2-4行   

     1     root:x:0:0:root:/root:/bin/bash
     5     lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

  • [iyunv@boxin ~]# nl /etc/passwd | sed '2,5c hello'           // 第2-5 行换掉

     1     root:x:0:0:root:/root:/bin/bash
hello
     6     sync:x:5:0:sync:/sbin:/bin/sync

  • [iyunv@boxin ~]# nl /etc/passwd | sed -n '2,4p'               // 显示 2-4 行 ,-n(安静模式)不加输出差别很大

     2     bin:x:1:1:bin:/bin:/sbin/nologin
     3     daemon:x:2:2:daemon:/sbin:/sbin/nologin
     4     adm:x:3:4:adm:/var/adm:/sbin/nologin
2:部分数据查找替换
     sed ‘s/要替换字段/新字段/g’   # 's///ng' 每行第n个开始才进行替换
     例如:截取eth0的ip地址
  • [iyunv@boxin ~]# /sbin/ifconfig eth0 | grep 'inet addr' | sed 's/^.*addr://g' | sed 's/Bcast.*$//g'
    192.168.159.131

     和正则表达式结合
wKioL1WHrDqxJhJvAABWhGXl8cw859.jpg
3:已匹配字符串标记&
wKiom1WHqoTS8rLEAACW87fy8a0089.jpg

4:字串匹配标记\1\2
     格式:'s/() ()/\1 \2'
wKioL1WHrDvCIOiXAABZYJ-sjco421.jpg




运维网声明 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.yunweiku.com/thread-79647-1-1.html 上篇帖子: 为python添加tab自动补全功能 下篇帖子: 搭建Python环境与Python文件类型 表达式
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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