当前位置: 首页 > news >正文

Linux sed 正则表达式的分组查找和替换

Linux sed 正则表达式的分组查找和替换。

替换IP:PORT信息中的某一段信息,用于IP:端口信息的脱敏。


替换前
cat a01.txt  

10.10.32.82:3100
10.10.22.49:21034
10.15.2.246:61501
10.200.18.89:3100
10.200.18.89:21


替换后(-E 和 -r 都是EBR扩展模式)

#!/bin/bashfor file in ./a*.txt; do#cat file |sed -E s/^\([0-9]+\)\(\\.\)\([0-9]+\)\(\\.[^:]+\)\(:\)\([0-9]+\)$/\\1\\2***\\4\\5***/gtext=$(cat $file | sed -E s/^\([0-9]+\)\(\\.\)\([0-9]+\)\(\\.[^:]+\)\(:\)\([0-9]+\)$/\\1\\2***\\4\\5***/g)echo "$text"
done

10.***.32.82:***
10.***.22.49:***
10.***.2.246:***
10.***.18.89:***
10.***.18.89:***


说明:
1)sed不支持PCRE正则表达式,因此,\d和\w此处只是普通的无效构造。要匹配任何字母,可以使用[:alpha:] POSIX字符类,或者如果要匹配大写字母,请使用[:upper:]。
2)分组值引用方式:\1 代表第一个分组值,\2代表第二个分组值,示例中我只需要替换第三个分组和最后一个(第六个)分组,保留第一、第二、第四、第五分组,因此,替换后的表达式中不需要引用第三、第六个捕获组。


POSIX 正则表达式的 BRE / ERE 模式差异:
1)BRE,标准正则表达式,Basic Regular Expressions
2)ERE,扩展正则表达式,Extended Regular Expressions  

Linux中,不同的程序支持的REGXP也不同:
sed  只支持BRE的大部分,sed 编辑器要尽可能快的处理数据流中的文本。但通过指定 -r 或 -E 参数也可以支持ERE。
grep 则可以支持ERE,不过要使用-E 选项。
gawk 使用BRE引擎。

BRE 定义的语法符号包括:
  .       - 匹配任意一个字符。
  []      - 字符集匹配,匹配方括号中定义的字符集之一。
  [^]     - 字符集否定匹配,匹配没有在方括号中定义的字符。
  ^       - 匹配开始位置。
  $       - 匹配结束位置。
  \(\)    - 定义子表达式。
  \n      - 子表达式向前引用,n 为 1-9 之间的数字。 由于此功能已超出正则语义,需
            要在字符串中回溯,因此需要使用 NFA 算法进行匹配。
  *       - 任意次匹配(零次或多次匹配)。
  \{m,n\} - 至少 m 次,至多 n 次匹配;\{m\} 表示 m 次精确匹配;\{m,\} 表示至少 m
            次匹配。

ERE 修改了 BRE 中的部分语法,并增加了以下语法符号:
  ?       - 最多一次匹配(零次或一次匹配)。
  +       - 至少一次匹配(一次或更多次匹配)。
  |       - 或运算,其左右操作数均可以为一个子表达式。

  同时,ERE 取消了子表达式 "()" 和 次数匹配 "{m,n}" 语法符号的转义符引用语法,在
  使用这两种语法符号时,不在需要添加转义符。 与此同时, ERE 也取消了非正则语义的
  子表达式向前引用能力。

  BRE 和 ERE 共享同样的 POSIX 字符类定义。同时,它们还支持字符类比较操作 "[. .]"
  和字符来等效体 "[= =]" 操作,但很少被使用。
  
  f / fr / wfr / bwfr 等工具默认使用 ERE 模式,同时支持以下 perl 风格的字符类:
  
     POSIX 类        perl类     描述
    ----------------------------------------------------------------------------
    [:alnum:]                   字母和数字
    [:alpha:]       \a         字母
    [:lower:]       \l         小写字母
    [:upper:]       \u         大写字母
    [:blank:]                  空白字符(空格和制表符)
    [:space:]       \s         所有空格符(比[:blank:]包含的范围广)
    [:cntrl:]                  不可打印的控制字符(退格、删除、警铃...)
    [:digit:]       \d         十进制数字
    [:xdigit:]      \x         十六进制数字
    [:graph:]                  可打印的非空白字符
    [:print:]       \p         可打印字符
    [:punct:]                  标点符号
 

相关文章:

  • hive 偏门函数
  • 【人工智能】Chatgpt的训练原理
  • 10.30 作业 C++
  • 初始React
  • 亚马逊云科技:探索未来云计算之窗
  • 【WebSocket】通信协议基于 node 的简单实践和心跳机制和断线重连的实现
  • 【0241】Parser解析分析统计信息(PARSE ANALYSIS STATISTICS)
  • 中职组网络安全-linux渗透测试-Server2203(环境+解析)
  • Yolov8实现瓶盖正反面检测
  • Isaac Sim:使用 Replicator Composer 生成合成数据
  • 技术经济与企业管理 救命稻草
  • 3D数字孪生场景编辑器
  • 基于YOLOv8深度学习的火焰烟雾检测系统【python源码+Pyqt5界面+数据集+训练代码】目标检测、深度学习实战
  • vulfocus apache-cve_2021_41773 漏洞复现
  • Go语言与Java:一场编程语言之争
  • JavaScript 如何正确处理 Unicode 编码问题!
  • 自己简单写的 事件订阅机制
  • Android 控件背景颜色处理
  • SegmentFault 2015 Top Rank
  • WebSocket使用
  • Web标准制定过程
  • 创建一种深思熟虑的文化
  • 大主子表关联的性能优化方法
  • 第2章 网络文档
  • 基于Android乐音识别(2)
  • 坑!为什么View.startAnimation不起作用?
  • 聊聊redis的数据结构的应用
  • 前嗅ForeSpider中数据浏览界面介绍
  • 日剧·日综资源集合(建议收藏)
  • 使用iElevator.js模拟segmentfault的文章标题导航
  • 想使用 MongoDB ,你应该了解这8个方面!
  • 小试R空间处理新库sf
  • nb
  • zabbix3.2监控linux磁盘IO
  • 昨天1024程序员节,我故意写了个死循环~
  • ​LeetCode解法汇总2808. 使循环数组所有元素相等的最少秒数
  • #快捷键# 大学四年我常用的软件快捷键大全,教你成为电脑高手!!
  • (+3)1.3敏捷宣言与敏捷过程的特点
  • (0)Nginx 功能特性
  • (delphi11最新学习资料) Object Pascal 学习笔记---第7章第3节(封装和窗体)
  • (function(){})()的分步解析
  • (JS基础)String 类型
  • (pojstep1.1.2)2654(直叙式模拟)
  • (Python) SOAP Web Service (HTTP POST)
  • (附源码)php新闻发布平台 毕业设计 141646
  • (九)信息融合方式简介
  • (论文阅读30/100)Convolutional Pose Machines
  • (每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理第3章 信息系统治理(一)
  • (十)T检验-第一部分
  • (转)linux自定义开机启动服务和chkconfig使用方法
  • (转)VC++中ondraw在什么时候调用的
  • ***利用Ms05002溢出找“肉鸡
  • .NET Core工程编译事件$(TargetDir)变量为空引发的思考
  • .NET 中什么样的类是可使用 await 异步等待的?
  • /etc/skel 目录作用