正则表达式干货笔记,拿好小本本哦!

正则表达式的模式及使用方法。

Linux, 正则表达式

基础正则表达式:

表示:
. 单个任意字符
[???] 匹配指定范围内的任意单个字符 & 示例: [123] 取意为匹配单个字符1或2或3
[^] 取反不包含的匹配

次数筛选:

  • 前一字符出现任意次数,零次或者多次
    .* 任意字符出现任意次数。
    ? 表示前一字符出现零或一次
    + 表示前一字符出现一次或以上
    {n} 精确前一字符出现的次数
    {n,m} 前一字符出现精确几次到几次
    {,n} 前一字符出现最多n次
    {n,} 前一字符出现最少n次

位置锚定:
^ 行首锚定,开头行首 &示例:^A
$ 行尾锚定,结尾字符 &示例:B$
^$ 表示空行
\b 放于字符左侧表示为单词词首
\b 放于字符右侧表示为单词词尾

分组:
() 将一个或多个字符捆绑在一起,当作一个整体处理。& 示例:(abc)+ 表示为abc 出现一次或以上次数,而不是c 出现了一次或以上次数
\1 后向引用,在一段命令中引用前某个指定分组的结果 & 示例:(aaa)+\1 再次引用第一个分组的aaa
| 或的运用 &示例:grep “^(a|b)” 此为表示抓取a或b开头的行

[扩展]:
[:alnum:] 字母和数字
[:alpha:] 代表任何英文大小写字符,=同于A-Z,a-z
[:lower:] 小写字母 [:upper:] 大写字母
[:blank:] 空白字符(空格和制表符)
[:space:] 水平和垂直的空白字符
[:cntrl:] 不可打印的控制字符 (推个、删除、警铃)
[:digit:] 十进制数字 [:xdigit:] 十六进制数字
[:graph:] 可打印的非空白字符
[:print:] 可打印字符
[:punct:] 标点符号

练习并解读说明

ip a |grep -o “([0-9].*[.])” # 通过正则表达式抓取ip地址,粗略
ip a |grep -o “[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}” # 正则表达式抓取ip地址
ip a |grep -o “\b([0-9]{1,3}.){3}[0-9]{1,3}\b” # 正则表达式抓取ip 地址升级版
df |grep “^/dev/sd” # 抓取硬盘使用率
ip a | egrep -o “\b(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5]).){3}([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\b”

练习题
题:显示/proc/meminfo 文件中以大小写s 开头的行(两种方式)
解:
cat /proc/meminfo |egrep “^(S|s)” # 扩展正则表达式
cat /proc/meminfo |grep “^(S|s)” # 基础正则表达式

题: 显示/etc/passwd 中不以/bin | /bash 开头结尾的行
解:
cat /etc/passwd |egrep -v “(/bin|/bash)KaTeX parse error: Expected 'EOF', got '#' at position 4: " #̲ 扩展正则表达式 cat /e…” # 基础正则表达式

题:显示用户默认的shell 程序
解:echo $SHELL

题: 找出/etc/passwd 中的两位或者三位数字
解: cat /etc/passwd |grep -o “[0-9]{2,3}”

题: 显示Centos7 的/etc/grub2.cfg文件中,至少以一个空白字符开头的且后面的非空白字符的行
解: cat /etc/grub2.cfg |grep “^ " |grep -v " $”

题:找出”netstat -tan“ 命令结果中以LISTEN后跟任意多个空白字符结尾的行。
解: cat f1 |grep “LISTEN( ).*$”

题: 添加用户bash、testbash、basher、sh、nologin(其shell为/sbin/nologin) ,找出/etc/passwd用户名和shell同名的行
解:cat /etc/passwd |grep “^\b(bin|bash|nologin|sh)\b”

扩展:cat /etc/passwd |tr -s " " : |cut -d: -f1 |grep “^\b(bin|bash|nologin|sh)\b”
解: 抓取passwd 中特定的字符

题:用正则表达式过滤一篇文章中的手机号和qq号

解:cat test.dh |egrep -o “(\b1[0-9]{10}\b)|(\b[0-9]{6,10}\b)”

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值