加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

正则表达式和grep、sed工具

发布时间:2020-12-14 01:12:48 所属栏目:百科 来源:网络整理
导读:what is 正则表达式 一种处理字符的方法,只要命令工具(例:grep、sed、awk等)支持这种方法,就可以用来处理正则表达式字符串。通过特殊字符的帮助,我们就容易达到查找、删除、替换特定字符串的命令程序。 用途 信息过滤,信息匹配,获取有用信息 常用的

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 //(根据行号)

  • [root@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

  • [root@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

  • [root@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

  • [root@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

  • [root@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地址

  • [root@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:字串匹配标记12

格式:'s/() ()/1 2'

wKioL1WHrDvCIOiXAABZYJ-sjco421.jpg

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读