sed正则经典例题

**题目:已知目标文件如下**
<html>
<title>First Web</title>
<body>
h1Helloh1
h2Helloh2
h3Helloh3
</body>
</html>
请使文件中的内容输出为:
<h1>Hello</h1>
<h2>Hello</h2>
<h3>Hello</h3>

创建环境

[[email protected] ~]# cat >>1.txt<<EOF
> <html>
> <title>First Web</title>
> <body>
> h1Helloh1
> h2Helloh2
> h3Helloh3
> </body>
> </html>
> EOF
[[email protected] ~]# cat 1.txt
<html>
<title>First Web</title>
<body>
h1Helloh1
h2Helloh2
h3Helloh3
</body>
</html>

解题思路:sed替换+反向引用

方法一:
[[email protected] ~]# sed -nr ‘4,6s#(..)(.*)(..)#<\1>\2</\3>#gp‘ 1.txt
<h1>Hello</h1>
<h2>Hello</h2>
<h3>Hello</h3>
[[email protected] ~]# sed -nr ‘4,6s#(h.)(.*)(h.)#<\1>\2</\3>#gp‘ 1.txt
<h1>Hello</h1>
<h2>Hello</h2>
<h3>Hello</h3>
方法二:
[[email protected] ~]# sed ‘s#h[1-9]#\<&\>#1‘ 1.txt|sed ‘s#h[1-9]#\<&/\>#2‘
<html>
<title>First Web</title>
<body>
<h1>Hello<h1/>
<h2>Hello<h2/>
<h3>Hello<h3/>
</body>
</html>
[[email protected] ~]# sed -n ‘4,6s#h[1-9]#\<&\>#1p‘ 1.txt|sed ‘s#h[1-9]#\<&/\>#2‘
<h1>Hello<h1/>
<h2>Hello<h2/>
<h3>Hello<h3/>
方法三:sed脚本
[[email protected] ~]# vim html.sh 
/h[0-9]/{
 s//\<&\>/1
s//\<\/&\>/2
}
[[email protected] ~]# cat html.sh 
/h[0-9]/{
 s//\<&\>/1
s//\<\/&\>/2
}
[[email protected] ~]# sed -f html.sh 1.txt|sed -n ‘4,6p‘
<h1>Hello</h1>
<h2>Hello</h2>
<h3>Hello</h3>

本题主要以sed的正则和扩展正则为解题思路,其他方法:如awk中的gsub替换函数等,有兴趣的可以自行尝试。

时间: 2024-10-10 20:59:57

sed正则经典例题的相关文章

sed正则经典案例(二)

sed正则经典案例(二)    ###修改登记信息格式 已知文本内容如下: [[email protected] oldboy]# cat 2.txt  张三--1995/04/12--186-1233-4324--5004132131231231231 李四--1993/05/20--175-4323-2343--4423432423413132133 王五--1989/12/21--150-3123-3123--4324234121231231242 请替换成如下结果: 张三 1995041

sed正则经典案例(四)

###修改日期格式,已知文件内容如下: 原始数据:文件date.txt 21/May/2017:09:29:24 +0800 22/May/2017:09:30:26 +0800 23/May/2017:09:31:56 +0800 24/May/2017:09:34:12 +0800 25/May/2017:09:35:23 +0800 26/May/2017:09:23:34 +0800 27/May/2017:09:22:21 +0800 28/May/2017:09:45:22 +080

[Python]Python 经典例题

Python 经典例题 1 题目:一个数如果恰好等于它的因子之和,这个数就称为"完数".例如6=1+2+3.编程找出1000以内的所有完数. #!/usr/bin/python # -*- coding: UTF-8 -*- from sys import stdout for j in range(2,1001): k = [] n = -1 s = j for i in range(1,j): if j % i == 0: n += 1 s -= i k.append(i) if

java--------动态的经典例题

多态一: 什么是动态: 同一行为的多种不同表达,或者同一行为的多种不同实现就叫做多态. 1)Person,Student,Teacher之间的关系 2)有一个"车"的父类,宝马继承自车,奔驰继承自车.那么反过来,车可以是宝马,也可以是奔驰,具有不同的形态,这种现象就叫多态.  如,我要上街买个东西,请你给我一辆车,这时你传给我的车(一个Car对象,形参)的一个实例(实参)就是多态(可以有不同的实现,宝马.奔驰.自行车等都可以). 3) "笔"是父类,钢笔.铅笔.圆珠

基本SQL练习题--选课经典例题

为管理岗位业务培训信息,建立3个表: S (S#,SN,SD,SA) S#,SN,SD,SA 分别代表学号.学员姓名.所属单位.学员年龄 C (C#,CN ) C#,CN 分别代表课程编号.课程名称 SC ( S#,C#,G ) S#,C#,G 分别代表学号.所选修的课程编号.学习成绩 1. 使用标准SQL嵌套语句查询选修课程名称为’税收基础’的学员学号和姓名 --实现代码: Select SN,SD FROM S Where [S#] IN( Select [S#] FROM C,SC Whe

到底什么是dp思想(内含大量经典例题,附带详细解析)

期末了,通过写博客的方式复习一下dp,把自己理解的dp思想通过样例全部说出来 说说我所理解的dp思想 dp一般用于解决多阶段决策问题,即每个阶段都要做一个决策,全部的决策是一个决策序列,要你求一个 最好的决策序列使得这个问题有最优解 将待求解的问题分为若干个相互联系的子问题,只在第一次遇到的时候求解,然后将这个子问题的答案保存 下来,下次又遇到的时候直接拿过来用即可 dp和分治的不同之处在于分治分解而成的子问题必须没有联系(有联系的话就包含大量重复的子问题,那 么这个问题就不适宜分治,虽然分治也

数据库与信息系统经典例题

数据库与信息系统经典例题 @阆苑祁寒 更新时间:2020-01-03 此版本是最终版本. 经典例题取自<数据库与信息系统>课程,仅供学术交流和期末复习,如有错误请指出,转载时请注明出处! 一.基础概念核查(填空) 用户创建数据库时,其主要数据文件的初始大小必须不小于_______系统数据库的大小. 关系数据模型由关系_______.______和_________三部分组成. 设有某个文件,当向其中插入一条新记录时,首先读文件头,找到最末磁盘块的地址后将最末磁盘块读入内存缓冲区,在缓冲区内将新

AC自动机【模板】+经典例题

AC自动机模板 经典例题 Keywords Search HDU - 2222 [求目标串中出现了几个模式串] [(注意:模式串可能会重复)] 模板: 1 const int maxn=26; 2 struct Trie 3 { 4 int next[500010][maxn]; 5 int fail[500010],end[500010]; 6 int root,L; 7 int newnode() //初始化 8 { 9 for(int i=0;i<26;i++) 10 next[L][i]

Linux sed正则匹配删除整行

原文内容: [[email protected] tmp]# more test.log 2019-12-01 09:09:02 Failed 2019-12-01 09:12:02 Failed 2019-12-01 09:15:03 Failed 2019-12-01 09:18:02 Failed 正则匹配Failed,删除整行(直接替换文本内容) [[email protected] tmp] sed -i '/Failed$/'d check.log 原文地址:https://www.