**题目:已知目标文件如下** <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替换函数等,有兴趣的可以自行尝试。