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

[经验分享] linux 正则表达式与实践

[复制链接]

尚未签到

发表于 2017-11-18 15:56:08 | 显示全部楼层 |阅读模式
  正则表达式基础
  
  准备
  (1)alias grep='grep --color=auto' 易于显示
  (2)LC_ALL=C,字符集,设置环境变量,字符顺序
  
  基础正则
  1)^word  匹配以Word开头的内容 vi/vim 里^代表一行的开头
  2)word$  匹配以Word结尾的内容 vi/vim 里$代表一行的结尾
  3)^$    表示空行
  #过滤空行,并显示行号
  [iyunv@wen data]# grep -n "^$" lrs.txt
  2:
  4:
  6:
  8:
  #过滤掉所有空行不显示
  [iyunv@wen data]# grep -v "^$" lrs.txt
  You're in a battle with
  A bulletproof heart
  You really got me, got me
  A bulletproof heart.
  
  4). 代表且只能代表任意一个字符
  5)\ 转义符号,让特殊字符显示其原型 \$ \.
  6)* 重复0个或多个前面一个字符,例 o* 匹配 没有o 有一个或多个 oo  oooooo……
  7).* 匹配所有字符 延伸 ^.*以任意多个字符开头  .*$以任意多个字符结尾
  点(.)含义总结
  1.当前目录
  2.使得文件生效 相当于source
  3.隐藏文件
  4.任意一个字符(grep正则)
  #只显示匹配到的内容
  [iyunv@wen data]# grep -on "you" lrs.txt
  9:you
  12:you
  
  8).[abc] 匹配字符集合内的任意一个字符[a-zA-Z],[0-9]
  9).[~abc]  匹配不包含~后的任意一个字符的内容
                            ~为去反,注意和中括号外面以……开头区别
                            [iyunv@wen data]# grep "[~ot]" lrs.txt
          
  10.a\{n,m\} 重复n到m次,前一个重复的字符 如果用egrep/sed -r 可以去掉斜线
           a\{n,\}  重复至少n次,前一个重复字符 如果用egrep或sed -r 可以去掉斜线
           a\{n\}  重复n次,前一个重复字符  如果用egrep/sed -r 可以去掉斜线
           a\{,m\}  重复最多m次
  扩展
           11. +  表示 重复一个或一个以上 前面的字符(*是0或多个)
           [iyunv@wen data]# grep -E "on+" lrs.txt
           So if you don't know how to
           I'm not gonna break your fall.
           12. ?  表示 0或一个 前面的字符(.是有且只有一个)
           13. |  表示同时过滤多个字符串
           root@wen data]# grep -E "3306|1521" /etc/services
           mysql 3306/tcp # MySQL
           mysql 3306/udp # MySQL
           ncube-lm 1521/tcp # nCube License Manager
           ncube-lm 1521/udp # nCube License Manager
  14.() 分组过滤,后向引用
           [iyunv@wen data]# grep -E "g(la|oo)d" lrs.txt
           glad
           good
  
          
  #POSIX字符类(了解)
  [:lower:] 匹配小写(麻烦,直接用下面的例子)
           root@wen data]# grep -E "[a-z]" lrs.txt
           You're in a battle with
           A bulletproof heart
           You really got me, got me
           A bulletproof heart.
  
  
  #元字符
  \b 单词边界 只过滤单词
           [iyunv@wen data]# grep -E "\byou\b" lrs.txt
           So if you don't know how to
           [iyunv@wen data]# grep -E "you" lrs.txt
           So if you don't know how to
           I'm not gonna break your fall.
  
  #三剑客grep总结
           -a 在二进制文件中,以文本文件的方式搜索数据
           -c 计算找到“搜索字符串”的次数
           -o 仅显示出匹配grep的内容(用于统计出现在文中的次数)
           -i 忽略大小写的不同,所有大小写视为相同
           -n  匹配的内容在其行首显示行号
           -v  反向选择,即显示没有“搜索字符串”内容的那一行
           -E  扩展的grep ,即egrep
           --color=auto  以特定颜色高亮显示匹配关键字
           -C #除了显示匹配行外,显示该行前后的num行
           -B #除了显示匹配行外,显示该行之前的num行
           -A #除了显示匹配行外,显示该行之后的num行   
  正则表达式实战
  一,将第一列与最后一列交换位置
  [iyunv@wen data]# tail /etc/passwd
  vcsa:x:69:69:virtual console memory owner:/dev:/sbin/nologin
  abrt:x:173:173::/etc/abrt:/sbin/nologin
  haldaemon:x:68:68:HAL daemon:/:/sbin/nologin
  ntp:x:38:38::/etc/ntp:/sbin/nologin
  saslauth:x:499:76:Saslauthd user:/var/empty/saslauth:/sbin/nologin
  postfix:x:89:89::/var/spool/postfix:/sbin/nologin
  sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
  tcpdump:x:72:72::/:/sbin/nologin
  mygirl:x:500:500::/home/mygirl:/bin/bash
  fadewalk:x:501:501::/home/fadewalk:/bin/bash
  
  
  [iyunv@wen data]# tail /etc/passwd |sed -nr 's#([^:]+)(:.*:)(/.*$)#\3\2\1#gp'  #第一个([^:])取非:开头的
  /sbin/nologin:x:69:69:virtual console memory owner:/dev:vcsa
  /sbin/nologin:x:173:173::/etc/abrt:abrt
  /sbin/nologin:x:68:68:HAL daemon:/:haldaemon
  /sbin/nologin:x:38:38::/etc/ntp:ntp
  /sbin/nologin:x:499:76:Saslauthd user:/var/empty/saslauth:saslauth
  /sbin/nologin:x:89:89::/var/spool/postfix:postfix
  /sbin/nologin:x:74:74:Privilege-separated SSH:/var/empty/sshd:sshd
  /sbin/nologin:x:72:72::/:tcpdump
  /bin/bash:x:500:500::/home/mygirl:mygirl
  /bin/bash:x:501:501::/home/fadewalk:fadewalk
  
  二,取IP或数字
  1.取数字
  [iyunv@wen ~]# ifconfig | sed -nr 's#^.*dr:(.*) B.*$#\1#gp'
  192.168.59.130
  [iyunv@wen ~]# stat /etc/hosts
  File: "/etc/hosts"
  Size: 158 Blocks: 8 IO Block: 4096 普通文件
  Device: 802h/2050d Inode: 40 Links: 2
  Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
  Access: 2017-10-11 20:22:15.436493668 +0800
  Modify: 2010-01-12 21:28:22.000000000 +0800
  Change: 2017-08-30 05:59:08.040858188 +0800
  取出644
  [iyunv@wen ~]# stat /etc/hosts|sed -nr 's#^.*0(.*)/-rw.*$#\1#gp'
  644
  [iyunv@wen ~]# stat /etc/hosts|sed -nr 's#^.*\(0(.*)/-rw.*$#\1#gp'
  644
  2.取IP
  [iyunv@wen data]# ifconfig eth0
  eth0      Link encap:Ethernet  HWaddr 00:0C:29:E9:95:DD
            inet addr:192.168.59.130  Bcast:192.168.59.255  Mask:255.255.255.0
            inet6 addr: fe80::20c:29ff:fee9:95dd/64 Scope:Link
            UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
            RX packets:6964 errors:0 dropped:0 overruns:0 frame:0
            TX packets:4430 errors:0 dropped:0 overruns:0 carrier:0
            collisions:0 txqueuelen:1000
            RX bytes:606332 (592.1 KiB)  TX bytes:489934 (478.4 KiB)
  
  [iyunv@wen ~]# ifconfig | sed -n '2s#^.*dr:##p'|sed 's# B.*$##g'
  192.168.59.130
  
  
  grep取IP
  [iyunv@wen ~]# ifconfig eth0 |grep "ddr:[0-9.]*"
            inet addr:192.168.13.128  Bcast:192.168.13.255  Mask:255.255.255.0
            inet6 addr: fe80::20c:29ff:fee9:95dd/64 Scope:Link
  [iyunv@wen ~]# ifconfig eth0 |grep -o "inet addr:[0-9.]*"
  inet addr:192.168.13.128
  [iyunv@wen ~]# ifconfig eth0 |grep -o "inet addr:[0-9.]*"|grep -o "[0-9]*"
  192
  168
  13
  128
  [iyunv@wen ~]# ifconfig eth0 |grep -o "inet addr:[0-9.]*"|grep -o "[0-9.]*"
  192.168.13.128
  
  
  
  
  
  
  

运维网声明 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-408263-1-1.html 上篇帖子: Linux学习(三)putty,xshell使用以及密匙登陆 下篇帖子: VMWare虚拟机中Ubuntu 16.04 (linux无桌面)配置静态IP上网
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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