windows ubuntu:sed,awk,grep篇:3,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.mfbz.cn/a/573926.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

「白嫖」开源的后果就是供应链攻击么?| 编码人声

「编码人声」是由「RTE开发者社区」策划的一档播客节目&#xff0c;关注行业发展变革、开发者职涯发展、技术突破以及创业创新&#xff0c;由开发者来分享开发者眼中的工作与生活。 面对网络安全威胁日益严重的今天&#xff0c;软件供应链安全已经成为开发者领域无法避免的焦点…

OpenWRT设置自动获取IP,作为二级路由器

前言 上一期咱们讲了在OpenWRT设置PPPoE拨号的教程&#xff0c;在光猫桥接的模式下&#xff0c;OpenWRT如果不设置PPPoE拨号&#xff0c;就无法正常上网。 OpenWRT设置PPPoE拨号教程 但现在很多新装的宽带&#xff0c;宽带师傅为了方便都会把光猫设置为路由模式。如果你再外…

【A-024】基于SSH的房屋租赁管理系统(含论文)

【A-024】基于SSH的房屋租赁管理系统&#xff08;含论文&#xff09; 开发环境&#xff1a; Jdk7(8)Tomcat7(8)MySQLIntelliJ IDEA(Eclipse) 数据库&#xff1a; MySQL 技术&#xff1a; SpringStruts2HiberanteBootstrapJquery 适用于&#xff1a; 课程设计&#xff0c;毕…

半波整流220V转正5V负-5V100mA恒压WT5101A

半波整流220V转正5V负-5V100mA恒压WT5101A WT5101A 是一款专为 Buck 和 Buck-Boost 拓扑而设计的高效、具有成本优势的离线恒压稳压器&#xff0c;内嵌有500V MOSFET。在降低系统成本的同时&#xff0c;这款稳压器只需少量的外部元件就能输出默认的5V电压。在轻负载条件下&…

Sping源码(七)—context: component-scan标签如何扫描、加载Bean

序言 简单回顾一下。上一篇文章介绍了从xml文件context component-scan标签的加载流程到ConfigurationClassPostProcessor的创建流程。 本篇会深入了解context component-scan标签底层做了些什么。 component-scan 早期使用Spring进行开发时&#xff0c;很多时候都是注解 标…

智能算法 | Matlab基于CBES融合自适应惯性权重和柯西变异的秃鹰搜索算法

智能算法 | Matlab基于CBES融合自适应惯性权重和柯西变异的秃鹰搜索算法 目录 智能算法 | Matlab基于CBES融合自适应惯性权重和柯西变异的秃鹰搜索算法效果一览基本介绍程序设计参考资料效果一览 基本介绍 Matlab基于CBES融合自适应惯性权重和柯西变异的秃鹰搜索算法 融合自适应…

ds18b20温度传感器驱动程序

ds18b20驱动程序 有了之前延时的方法&#xff0c;那么实现一个单总线数据传输的传感器驱动程序就非常简单了。下面我们套用杂项驱动框架来编写ds18b20驱动程序。 实现需要明确的是&#xff1a;**ds18b20驱动的本质是通过2440的gpio&#xff0c;通过给定的时序对ds18b20的读写数…

【介绍下WebStorm开发插件】

&#x1f3a5;博主&#xff1a;程序员不想YY啊 &#x1f4ab;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f917;点赞&#x1f388;收藏⭐再看&#x1f4ab;养成习惯 ✨希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出…

保护你的网站:了解5种常见网络攻击类型及其防御方法

随着互联网的迅猛发展&#xff0c;针对网站的各种类型的网络攻击随之增加&#xff0c;网络攻击事件层出不穷&#xff0c;由此&#xff0c;如何保护网站安全成为每个网站所有者的重要议题。在下面的内容中&#xff0c;我们将探讨5种常见网络攻击类型及其防御方法&#xff0c;以帮…

SNETCracker--超级弱口令检查工具简介

一、简介 SNETCracker 超级弱口令检查工具是一款Windows平台的弱口令审计工具&#xff0c;支持批量多线程检查&#xff0c;可快速发现弱密码、弱口令账号&#xff0c;密码支持和用户名结合进行检查&#xff0c;大大提高成功率&#xff0c;支持自定义服务端口和字典。 二、SNE…

常见内网系统网络结构及nginx代理配置

系统网络结构图及nginx配置 1.系统网络结构图2.Nginx网络配置2.1请求从互联网区访问到内网区2.2 请求从内网访问互联网 1.系统网络结构图 传统公司服务部署网络都会分区&#xff0c;应用都部署在内网区&#xff0c;请求通过dmz区转出内网与互联网发生交互。 结构图详解&#…

springCloud集成activiti5.22.0流程引擎

springCloud集成activiti5.22.0流程引擎 点关注不迷路&#xff0c;欢迎再访&#xff01; 精简博客内容&#xff0c;尽量已行业术语来分享。 努力做到对每一位认可自己的读者负责。 帮助别人的同时更是丰富自己的良机。 小编最近工作需要涉及到流程&#xff0c;由于网络上5.22版…

CHARLS轻松发二区,只用了COX回归模型 | CHARLS CLHLS CFPS 公共数据库周报(4.3)...

零基础CHARLS发论文&#xff0c;不容错过&#xff01; 长期回放更新指导&#xff01;适合零基础&#xff0c;毕业论文&#xff0c;赠送2011-2020年CHARLS清洗后的数据全套代码&#xff01; CHARLS公共数据库 CHARLS数据库简介中国健康与养老追踪调查(China Health and Retireme…

C++初阶学习第三弹——类与对象(上)——初始类与对象

前言&#xff1a; 在前面&#xff0c;我们已经初步学习了C的一些基本语法&#xff0c;比如内敛函数、函数重载、缺省参数、引用等等&#xff0c;接下来我们就将正式步入C的神圣殿堂&#xff0c;首先&#xff0c;先给你找个对象 目录 一、类与对象是什么&#xff1f; 二、类的各…

ArtNeRF、Attention Control、Pixel is a Barrier、FilterPrompt

本文首发于公众号&#xff1a;机器感知 ArtNeRF、Attention Control、Pixel is a Barrier、FilterPrompt ArtNeRF: A Stylized Neural Field for 3D-Aware Cartoonized Face Synthesis Recent advances in generative visual models and neural radiance fields have greatly …

【笔试训练】day11

1.游游的水果大礼包 思路&#xff1a; 枚举。假设最后的答案是x个a礼包&#xff0c;y个b礼包&#xff0c;得到一个式子&#xff1a;ansa*xb*y 我们可以枚举x的数量&#xff0c;这样就能变相的把y的求出来。呃这就是鸡兔同笼问题嘛 x最大的范围是多少呢&#xff1f;也就是a礼…

【CouchDB 与 PouchDB】

CouchDB是什么 CouchDB&#xff0c;全名为Apache CouchDB&#xff0c;是一个开源的NoSQL数据库&#xff0c;由Apache软件基金会管理。CouchDB的主要特点是使用JSON作为存储格式&#xff0c;使用JavaScript作为查询语言&#xff08;通过MapReduce函数&#xff09;&#xff0c;并…

面试二十二、跳表SkipLists

跳表全称为跳跃列表&#xff0c;它允许快速查询&#xff0c;插入和删除一个有序连续元素的数据链表。跳跃列表的平均查找和插入时间复杂度都是O(logn)。快速查询是通过维护一个多层次的链表&#xff0c;且每一层链表中的元素是前一层链表元素的子集&#xff08;见右边的示意图&…

day07 51单片机-18B20温度检测

18B20温度检测 1.1 需求描述 本案例讲解如何从18B20传感器获取温度信息并显示在LCD上。 1.2 硬件设计 1.2.1 硬件原理图 1.2.3 18B20工作原理 可以看到18B20有两根引脚负责供电&#xff0c;一根引脚负责数据交换。18B20就是通过数据线和单片机进行数据交换的。 1&#xf…

前端项目中使用插件prettier/jscodeshift/json-stringify-pretty-compact格式化代码或json数据

同学们可以私信我加入学习群&#xff01; 正文开始 前言一、json代码格式化-选型二、json-stringify-pretty-compact简单试用三、prettier在前端使用四、查看prettier支持的语言和插件五、使用prettier格式化vue代码最终效果如图&#xff1a; ![在这里插入图片描述](https://im…