windows ubuntu:sed,awk,grep篇:3,sed正则表达式

目录

20.正则表达式基础

21.其他正则表达式

22.在 sed 替换中使用正则表达式


20.正则表达式基础

很多 *nix 的命令中,都用到了正则表达式,包括 sed
行的开头 ( ^ )
^ 匹配每一行的开头
显示以 103 开头的行 :
$ sed -n '/^103/ p' employee.txt
103,Raj Reddy,Sysadmin
只有 ^ 出现在正则表达式开头时,它才匹配行的开头。所以, ^N 匹配所有以 N 开头的行。
行的结尾 ( $ )
$匹配行的结尾。
显示以字符 r 结尾的行:
$ sed -n '/r$/ p' employee.txt
102,Jason Smith,IT Manager
104,Anand Ram,Developer
105,Jane Miller,Sales Manager
单个字符 ( . )
元字符点 . 匹配除换行符之外的任意单个字符。
z . 匹配单个字符
z .. 匹配两个字符
z 匹配三个字符
z ……以此类推
下面的例子中,模式”J 后面跟三个字符和一个空格将被替换为”Jason 后面一个空格
所以,”J… “同时匹配 employee.txt 文件中的”John “”Jane “,替换结果如下:
$ sed -n 's/J... /Jason /p' employee.txt
101,Jason Doe,CEO
105,Jason Miller,Sales Manager
匹配 0 次或多次 ( * )
星号 * 匹配 0 个或多个其前面的字符。如: 1* 匹配 0 个或多个 1
先建立下面文件:
$ vim log.txt
log: input.txt
log:
log: testing resumed
log:
log:output created
假设你想查看那些包含 log 并且后面有信息的行, log 和信息之间可能有 0 个或多个空格,
同时不想查看那些 log: 后面没有任何信息的行。
显示包含 log: 并且 log 后面有信息的行, log 和信息之间可能有空格 :
$ sed -n '/log: *./p' log.txt
log: input.txt
log: testing resumed
log:output created
注意: 上面例子中,后面的点 . 是必需的,如果没有, sed 只会打印所有包含 log 的行。
匹配一次或多次 ( \+ )
“\+”匹配一次或多次它前面的字符,例如 空格\+ “ \+”匹配至少一个或多个空格。
仍旧使用 log.txt 这个文件来作示例。
显示包含 log: 并且 log: 后面有一个或多个空格的所有行:
$ sed -n '/log: \+/ p' log.txt
log: input.txt
log: testing resumed
注意 : 这个例子既没有匹配只包含 log: 的行,也没有匹配 log:output craeted 这一行,因为 log:
后面没有空格。
零次或一次匹配 ( \? )
\?匹配 0 次或一次它前面的字符。如:
$ sed -n '/log: \?/ p' log.txt
log: input.txt
log:
log: testing resumed
log:
log:output created
转义字符 ( \ )
如果要在正则表达式中搜寻特殊字符(:*,.),必需使用\来转义它们。
$ sed -n '/127\.0\.0\.1/ p' /etc/hosts
127.0.0.1 localhost
字符集 ( [0-9] )
字符集匹配方括号中出现的任意一个字符。
匹配包含 2 3 或者 4 的行 :
$ sed -n '/[234]/ p' employee.txt
102,Jason Smith,IT Manager
103,Raj Reddy,Sysadmin
104,Anand Ram,Developer
在方括号中,可以使用连接符-指定一个字符范围。如[0123456789]可以用[0-9]表示,字母可
以用[a-z],[A-Z]表示,等等。
匹配包含 2 3 或者 4 的行 ( 另一种方式 ):
$ sed -n '/[2-4]/ p' employee.txt
102,Jason Smith,IT Manager
103,Raj Reddy,Sysadmin
104,Anand Ram,Developer

21.其他正则表达式

或操作符 ( | )
管道符号 | 用来匹配两边任意一个子表达式。子表达式 1| 子表达式 2 匹配子表达式 1 或者子
表达式 2
打印包含 101 或者包含 102 的行:
$ sed -n '/101\|102/ p' employee.txt
101,John Doe,CEO
102,Jason Smith,IT Manager
需要注意,| 需要用\转义。
打印包含数字 2~3 或者包含 105 的行:
$ sed -n '/[2-3]\|105/ p' employee.txt
102,Jason Smith,IT Manager
103,Raj Reddy,Sysadmin
105,Jane Miller,Sales Manager
精确匹配 m ( {m} )
正则表达式后面跟上{m}标明精确匹配该正则 m 次。
请先建立如下文件:
$ vi numbers.txt
1
12
123
1234
12345
123456
打印包含任意数字的行 ( 这个命令将打印所有行 ):
$ sed -n '/[0-9]/ p' numbers.txt
1
12
123
1234
12345
123456
打印包含 5 个数字的行 :
$ sed -n '/^[0-9]\{5\}$/ p' numbers.txt
12345
注意这里一定要有 s 开头和结尾符号,即 ^ $, 并且 { } 都要用 \ 转义 匹配 m n ( {m,n} ):
正则表达式后面跟上 {m,n} 表明精确匹配该正则至少 m ,最多 n 次。 m n 不能是负数,并
且要小于 255.
打印由 3 5 个数字组成的行:
$ sed -n '/^[0-9]\{3,5\}$/ p' numbers.txt
123
1234
12345
正则表达式后面跟上 {m,} 表明精确匹配该正则至少 m ,最多不限。 ( 同样,如果是 {,n} 表明最
多匹配 n 次,最少一次 )
字符边界 ( \b )
\b 用来匹配单词开头 (\bxx) 或结尾 (xx\b) 的任意字符,因此 \bthe\b 将匹配 the, 但不匹配 they.
\bthe 将匹配 the they.
请先建立如下文件 :
$ cat words.txt
word matching using: the
word matching using: thethe
word matching using: they
匹配包含 the 作为整个单词的行:
$ sed -n '/\bthe\b/ p' words.txt
word matching using: the
注意:如果没有后面那个 \b, 将匹配所有行。
匹配所有以 the 开头的单词:
$ sed -n '/\bthe/ p' words.txt
word matching using: the
word matching using: thethe
word matching using: they
回溯引用 ( \n )
使用回溯引用,可以给正则表达式分组,以便在后面引用它们。
只匹配重复 the 两次的行:
$ sed -n '/\(the\)\1/ p' words.txt
word matching using: thethe
同理, ”\([0-9]\)\1” 匹配连续两个相同的数字,如 11,22,33 …..

22.sed 替换中使用正则表达式

下面是一些使用正则表达式进行替换的例子。
employee.txt 中每行最后两个字符替换为”,Not Defined”:
$ sed -n 's/..$/,Not Defined/ p' employee.txt
101,John Doe,C ,Not Defined
102,Jason Smith,IT Manag ,Not Defined
103,Raj Reddy,Sysadm ,Not Defined
104,Anand Ram,Develop ,Not Defined
105,Jane Miller,Sales Manag ,Not Defined
删除以 Manager 开头的行的后面的所有内容 :
$ sed 's/^Manager.*//' employee.txt
101,John Doe,CEO
102,Jason Smith,IT Manager
103,Raj Reddy,Sysadmin
104,Anand Ram,Developer
105,Jane Miller,Sales Manager
这个示例好像有点问题啊,我觉得应该是 sed ‘s/^Manager.*/Manager/’
删除所有以 # 开头的行:
$ sed -e 's/#.*// ; /^$/ d' employee.txt
101,John Doe,CEO
102,Jason Smith,IT Manager
103,Raj Reddy,Sysadmin
104,Anand Ram,Developer
105,Jane Miller,Sales Manager
我觉得用 sed ‘/^#/ d’ 更好
建立下面的 test.html 文件:
$ vim test.html
<html><body><h1>Hello World!</h1></body></html>
清除 test.html 文件中的所有 HTML 标签 :
$ sed 's/<[^>]*>//g' test.html
Hello World!
删除所有注释行和空行 :
$ sed -e 's/#.*// ; /^$/ d' /etc/profile
只删除注释行,保留空行 :
sed '/#.*/ d' /etc/profile
使用 sed 可以把 DOS 的换行符 (CR/LF) 替换为 Unix 格式。当把 DOS 格式的文件拷到 Unix 上,
你会发现,每行结尾都有 \r\n .
使用 sed DOS 格式的文件转换为 Unix 格式 :
sed ‘s/.$//’ filename

资料来源于《SedandAwk101Hacks》,大家有兴趣可以买一本,也可以关注我,我更新完它。

曾经,我花费大半月将它们跑完,现在啥都忘了,还是要常用。

只为学习交流,不为获利,侵权联系立删。

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

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

相关文章

秋招后端开发面试题 - JVM底层原理

目录 JVM底层原理前言面试题Java 对象的创建过程&#xff1f;什么是指针碰撞&#xff1f;什么是空闲列表&#xff1f;/ 内存分配的两种方式&#xff1f;JVM 里 new 对象时&#xff0c;堆会发生抢占吗&#xff1f;JVM 是怎么设计来保证线程安全的&#xff1f;/ 内存分配并发问题…

k8s pod使用sriov

之前的文章中讲了k8s multus的使用&#xff0c;本章节来讲述下如何使用multus来实现sriov的使用。 一、sriov 简介 SR-IOV在2010年左右由Intel提出&#xff0c;但是随着容器技术的推广&#xff0c;intel官方也给出了SR-IOV技术在容器中使用的开源组件&#xff0c;例如&#…

3MF体积设计扩展

3MF 联盟最近宣布了他们最新的体积设计扩展&#xff08;volumetric design extension&#xff09;&#xff0c;用于通过基于体积的描述来编码几何形状和空间多样性属性。 该组织致力于推进 3D 打印的通用规范&#xff0c;目前正在新扩展达到 1.0 之前征求公众反馈。 NSDT工具推…

OpenCV 实现重新映射

返回:OpenCV系列文章目录&#xff08;持续更新中......&#xff09; 上一篇&#xff1a;OpenCV 实现霍夫圆变换 下一篇 :OpenCV实现仿射变换 目标 在本教程中&#xff0c;您将学习如何&#xff1a; 一个。使用 OpenCV 函数 cv&#xff1a;&#xff1a;remap 实现简单的重新…

20240428如何利用IDM下载磁链视频

缘起&#xff1a; https://weibo.com/tv/show/1034:4864336909500449 中国获奖独立纪录片《阿辉》揭秘红灯区“教父”的生存法则 5,751次观看 1年前 发布于 陕西 身为里中横 67.7万粉丝 互联网科技博主 微博原创视频博主 头条文章作者 https://weibo.com/tv/show/1034:4864…

数据通信-A

数据通信 一、数据通信网络基础二、VRP系统三、eNSP配置命令 不是从零开始&#xff0c;有一些基础&#xff0c;主要记录配置命令。一、数据通信网络基础 图标&#xff1a;主要是认识第一行。 常见术语&#xff1a;数据通信网络最基本的功能是实现数据互通。 数据载荷&#…

解决IDEA下springboot项目打包没有主清单属性

1.问题出现在SpringBoot学习中 , 运行maven打包后无法运行 报错为spring_boot01_Demo-0.0.1-SNAPSHOT.jar中没有主清单属性 SpringBoot版本为 2.6.13 Java 版本用的8 解决方法 1.执行clean 删除之前的打包 2.进行打包规范设置 2.1 3.进行问题解决 (借鉴了阿里开发社区) 使用…

[嵌入式系统-53]:嵌入式系统集成开发环境大全

目录 一、嵌入式系统集成开发环境分类 二、由MCU芯片厂家提供的集成开发工具 三、由嵌入式操作提供的集成开发工具 四、由第三方工具厂家提供的集成开发工具 一、嵌入式系统集成开发环境分类 嵌入式系统集成开发工具和集成开发环境可以按照不同的分类方式进行划分&#xff…

【LAMMPS学习】八、基础知识(5.2)粒度模型

8. 基础知识 此部分描述了如何使用 LAMMPS 为用户和开发人员执行各种任务。术语表页面还列出了 MD 术语&#xff0c;以及相应 LAMMPS 手册页的链接。 LAMMPS 源代码分发的 examples 目录中包含的示例输入脚本以及示例脚本页面上突出显示的示例输入脚本还展示了如何设置和运行各…

将针孔模型相机 应用到3DGS

Motivation 3DGS 的 投影采用的是 CG系的投影矩阵 P P P, 默认相机的 principal point (相机光心) 位于图像的中点处。但是 实际应用的 绝大多数的 相机 并不满足这样一个设定&#xff0c; 因此我们 需要根据 f , c x , c y {f,c_x, c_y} f,cx​,cy​ 这几个参数重新构建3D …

centos 7 yum install -y nagios

centos 7 systemctl disable firewalld --now vi /etc/selinux/config SELINUXdisabled yum install -y epel-release httpd nagios yum install -y httpd nagios systemctl enable httpd --now systemctl enable nagios --now 浏览器 IP/nagios 用户名&#xff1a;…

vue学习的预备知识为学好vue打好基础

目录 Vue是什么 &#xff1f;如何使用Vue &#xff1f;Vue ApiVue入口apiVue实例apiVue函数api 无构建过程的渐进式增强静态HTMLVue模块化构建工具npmyarnWebpackvue-cliVite Vue是什么 &#xff1f; 文章基于Vue3叙述。 Vue (发音为 /vjuː/&#xff0c;类似 view) 是一款用于…

十大USDT交易平台大全XEX交易所

USDT是一种基于比特币区块链网络的加密代币&#xff0c;主要运用于数字货币交易平台&#xff0c;以稳定币为主。USDT的核心价值在于其与真实货币的固定兑换比率1:1&#xff0c;所以被称为Tether。随着加密货币市场的不断壮大&#xff0c;越来越多的交易平台开始支持USDT&#x…

2024深圳杯(东北三省)数学建模C题完整论文讲解(含完整python代码及所有残骸音爆位置求解结果)

大家好呀&#xff0c;从发布赛题一直到现在&#xff0c;总算完成了2024深圳杯&#xff08;东北三省数学建模联赛&#xff09;A题多个火箭残骸的准确定位完整的成品论文。 本论文可以保证原创&#xff0c;保证高质量。绝不是随便引用一大堆模型和代码复制粘贴进来完全没有应用糊…

【vscode环境配置系列】vscode远程debug配置

VSCODE debug环境配置 插件安装配置文件debug 插件安装 安装C/C, C/C Runner 配置文件 在项目下建立.vscode文件夹&#xff0c;然后分别建立c_cpp_properties.json&#xff0c; launch.json&#xff0c;tasks.json&#xff0c;内容如下&#xff1a; c_cpp_properties.json:…

如何解决pycharm创建项目报错 Error occurred when installing package ‘requests‘. Details.

&#x1f42f; 如何解决PyCharm创建项目时的包安装错误&#xff1a;‘requests’ &#x1f6e0;️ 文章目录 &#x1f42f; 如何解决PyCharm创建项目时的包安装错误&#xff1a;requests &#x1f6e0;️摘要引言正文&#x1f4d8; **问题分析**&#x1f680; **更换Python版本…

如何利用快解析软件搭建映射端口

端口映射&#xff0c;就是将内网中主机的一个端口映射到外网主机的一个端口&#xff0c;提供相应的服务&#xff0c;当用户访问外网IP的这个端口时&#xff0c;服务器自动将请求映射到对应局域网内部的机器上。如何才能实现端口映射&#xff1f;今天小编给大家介绍两种方法&…

fetch请求后端返回文件流,并下载。

前端&#xff1a; <script src"~/layui/layui.js"></script> <script src"~/Content/js/common/js/vue.min.js"></script> <script src"~/Content/js/common/js/jquery-1.10.2.min.js"></script><styl…

QT学习篇—qt软件安装

qt下载网址http://download.qt.io/new_archive/qt/ QT官网Qt | Tools for Each Stage of Software Development LifecycleAll the essential Qt tools for all stages of Software Development Lifecycle: planning, design, development, testing, and deployment.https:…

虚拟机扩容-根目录挂载sda1的空间不足

提醒&#xff01;不管成不成功&#xff0c;一定要先备份一份虚拟机&#xff01;&#xff01;&#xff01;&#xff01;&#xff01; 走过路过点个关注吧&#xff0c;想到500粉丝&#xff0c;哭。一、查看分区情况 df -h可以看到/dev/sda1已经被占满了 2.关闭虚拟机&#xff…