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:]                  标点符号
 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/204756.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于LSTM和N-gram序列的英文文本生成(文末送书)

🤵‍♂️ 个人主页:艾派森的个人主页 ✍🏻作者简介:Python学习者 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞&#x1f4…

echarts图之 底部滚动横轴 缩放图形大小

//折线图-堆叠面积图function pileLineChart(odata, dom){//放大缩小的代码startvar dataZoom [],y240;if(odata.xData.length > 7){dataZoom [{show: true,realtime: true,startValue:0, endValue:5,left:"center",top:"auto",right:"auto"…

SAAS版技术中台必备【智能Print打印】系统

今天给大家介绍一个,全网唯一智能打印系统。 系统特色: 1帮助企业,工业,连接多种打印设备管理; 2.跨系统连接打印设备,进行数据传输 3.打通企业内部所有系统打印功能 4.跨越技术壁垒;使用简…

主食罐头哪个牌子好?猫主食罐头品牌分享

进口的猫罐头在近期确实经历了一些困难。由于疫情的影响,许多货品无法正常进口;而最近禽流感的问题也对备受好评的德罐品牌造成了重大冲击。 然而,我们国内生产的猫罐头产品在这段时间展现出了出色的表现。我们推出了许多优质产品&#xff0…

生成器简述 - python 基础进阶知识点补全(一)

可迭代对象: 可以用于for ... in ..循环对对象都是可迭代对象,比如: list tuple dict set 可以迭代的对象就是可迭代对象,python 中一切都是对象,在这里主要说的是变量 a [1,2,3] b (1,2,3,) c "1234&q…

文献速递:多模态影像组学文献分享:生成一种多模态人工智能模型以区分甲状腺良性和恶性滤泡性肿瘤:概念验证研究

文献速递:多模态影像组学文献分享:生成一种多模态人工智能模型以区分甲状腺良性和恶性滤泡性肿瘤:概念验证研究 文献速递介绍 近年来,人工智能(AI)领域日益被探索,作为一种增强传统医学诊断和…

Failed to resolve org.junit.platform:junit-platform-launcher:1.9.3

springboot 跑 unit test 的时候,如果报错如题的话,可以更改idea 里的 Settings ——> HTTP Proxy 配置为:Auto-detect proxy settings

Google 发布最强大模型Gemini,能力与GPT-4相当

一、Gemini 介绍 Gemini 是一个多模式模型系列,在图像、音频、视频和文本领域展示了真正强大的功能。其中功能最强大的模型 Gemini Ultra 在 32 个基准测试中的 30 个中提升了最先进水平,其中包括 12 个流行文本和推理基准测试中的 10 个、9 个图像理解…

让工作更高效,那些不能错过的8款泳道图绘制工具

在现代企业的运营管理中,泳道图扮演了至关重要的角色。这种独特的图表工具以其直观、清晰的特点,帮助我们理解和改进复杂的工作流程,从而提升效率。本文将为你分享8款实用且高效的泳道图绘制工具,它们能够帮助你轻松创建出专业级别…

Java程序员,你掌握了多线程吗?【文末送书】

目录 摘要 01、多线程对于Java的意义 02、为什么Java工程师必须掌握多线程 03、Java多线程使用方式 04、如何学好Java多线程 参与方式🥇 推荐一个人工智能学习网站 https://www.captainbed.cn/bear 摘要 互联网的每一个角落,无论是大型电商平台的…

C语言内存函数讲解

目录 文章目录 内存函数针对的数据类型不确定可能是整型数据,字符数据,结构体数据...... memcpy的使用和模拟实现 memcpy的使用 memcpy打印字符数据 memcpy打印整型数据 memcpy的模拟实现 模拟实现的memcpy打印重叠情境 memmove的使用和模拟实现 memm…

为什么出海企业需要呼叫中心?

随着现代商业世界的发展,企业面临着越来越多的挑战和机遇。为了提高客户服务水平、客户满意度、企业形象和销售业绩,呼叫中心已成为越来越多企业的首选。那么,为什么出海企业需要呼叫中心呢? 1. 提高客户服务质量 首先&#xff…

Linux | tar,bc,uname指令

Linux | tar,bc, 文章目录 Linux | tar,bc,tar指令【重要】bc指令uname –r指令 tar指令【重要】 tar [-cxtzjvf] 文件与目录 … 参数: -c :建立一个压缩文件的参数指令(create 的意思);-x &am…

为什么对中小企业来说,数字化转型很难?

引言 数字化转型对中小企业至关重要,然而,实施这一转型却充满挑战。中小企业面临着资源、技术、文化和安全方面的种种难题,这些困难限制了它们在数字化领域的发展和竞争力。这种挑战不仅影响企业内部运营,还直接影响其与客户和市…

中国的下一个风口:数字化!

——“中国的下一个风口是什么?数字化?你赞同吗?” ——“中国的下一个风口是不是‘数字化’,不敢妄下定论。” 但可以肯定的是,企业想站上未来产业的风口,“数字化”是必经之路。也就是说,数…

HarmonyOS 开发 Java 与 ArkTS 如何抉择?

本文详细分析 Java 与 ArkTS 在 HarmonyOS 开发过程的区别,力求解答学员的一些困惑。 何为 HarmonyOS? 在讨论语言的差异时,我们先了解下什么是 HarmonyOS。华为官方是这么解释 HarmonyOS 的: “鸿蒙操作系统”特指华为智能终端…

视频集中存储/智能分析融合云平台EasyCVR平台接入rtsp,突然断流是什么原因?

安防视频监控/视频集中存储/云存储/磁盘阵列EasyCVR平台可拓展性强、视频能力灵活、部署轻快,可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等,以及支持厂家私有协议与SDK接入,包括海康Ehome、海大宇等设备的SDK等。平台既具备传统安…

Halcon 机械视觉 使用仿射变换 机械手实现孔位定位

要推算机械手平面坐标系A与相机平面坐标系B的关系,我们可以首先找到两个平面坐标系之间的平移量和旋转量。 平移量:选择一个公共的参考点,比如某个标志物,假设在坐标系A中的坐标为(Ax, Ay),在坐标系B中的坐标为(Bx, B…

GD32F303移植RT-Thread

我的平台: 芯片:GD32F303CCT6 编译器:KEIL5 一、下载keil专用 RT-Thread 安装包 https://www.keil.arm.com/packs/ 。。。。 。。。。 二、准备一个干净的GD32F303裸机工程,我就增加了串口功能 三、开始移植 1.rt-thread系统…

Java网络编程——非阻塞通信

对于用ServerSocket以及Socket编写的服务器程序和客户程序,它们在运行过程中常常会阻塞。例如当一个线程执行ServerSocket的accept()方法时,假如没有客户连接,该线程就会一直等到有了客户连接才从accept()方法返回。再例如当线程执行Socket的…