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

创建环境

[root@oldboyedu36 ~]# cat >>html.txt<<EOF
> <html>
> <title>First Web</title>
> <body>
> h1Helloh1
> h2Helloh2
> h3Helloh3
> </body>
> </html>
> EOF
[root@oldboyedu36 ~]# cat html.txt
<html>
<title>First Web</title>
<body>
h1Helloh1
h2Helloh2
h3Helloh3
</body>
</html>

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

方法一:
[root@oldboyedu36 ~]# sed -nr '4,6s#(..)(.*)(..)#<\1>\2</\3>#gp' html.txt
<h1>Hello</h1>
<h2>Hello</h2>
<h3>Hello</h3>
[root@oldboyedu36 ~]# sed -nr '4,6s#(h.)(.*)(h.)#<\1>\2</\3>#gp' html.txt
<h1>Hello</h1>
<h2>Hello</h2>
<h3>Hello</h3>
方法二:
[root@oldboyedu36 ~]# sed 's#h[1-9]#\<&\>#1' html.txt|sed 's#h[1-9]#\<&/\>#2'
<html>
<title>First Web</title>
<body>
<h1>Hello<h1/>
<h2>Hello<h2/>
<h3>Hello<h3/>
</body>
</html>
[root@oldboyedu36 ~]# 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/>
法三:终极版:
[root@oldboyedu36 ~]# sed -nr '{/h[1-9]/s##<&>#1;s#h[1-9]#<&/>#2p}' html.txt
<h1>Hello<h1/>
<h2>Hello<h2/>
<h3>Hello<h3/>
方法三:sed脚本
[root@oldboyedu36 ~]# vim html.sh 
/h[0-9]/{
 s//\<&\>/1
s//\<\/&\>/2
}
[root@oldboyedu36 ~]# cat html.sh 
/h[0-9]/{
 s//\<&\>/1
s//\<\/&\>/2
}
[root@oldboyedu36 ~]# sed -f html.sh 1.txt|sed -n '4,6p'
<h1>Hello</h1>
<h2>Hello</h2>
<h3>Hello</h3>

其他方法:
awk '/Hello/{printgensub(/^(h[0-9])(.*)(h[0-9])/,"<\\1>\\2</\\3>","G")}'html.txt

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