sed使用正则表达式查找替换(inplace replace)

时间:2013-03-18 21:28:42

标签: sed

我需要在许多文件中查找并替换某些文本。我想用sed来做替换。这是我想要做的:

查找

<font size="4" face="verdana, arial,geneva"><b>([^<]*)</b></font>

替换为:

<font size="4" face="verdana, arial,geneva"><b><title>$1</title></b></font>

基本上我想在我发现的内容周围添加<title></title>标记。

e.g。如果文字如下:

<font size="4" face="verdana, arial,geneva"><b>THIS IS MY TITLE</b></font>

我想将其替换为:

<font size="4" face="verdana, arial,geneva"><b><title>THIS IS MY TITLE</title></b></font>

我尝试了各种命令,但似乎没有用。这是我迄今为止尝试过的命令:

sed -e 's/<font size="4" face="verdana, arial,geneva"><b>\([^<]*\)<\/b><\/font>/<font size="4" face="verdana, arial,geneva"><b><title>\1<\/title><\/b><\/font>/g'
sed -r 's/<font size="4" face="verdana, arial,geneva"><b>([^<]*)<\/b><\/font>/<font size="4" face="verdana, arial,geneva"><b><title>\1<\/title><\/b><\/font>/g' 
sed -E 's/<font size="4" face="verdana, arial,geneva"><b>([^<]*)<\/b><\/font>/<font size="4" face="verdana, arial,geneva"><b><title>\1<\/title><\/b><\/font>/g'

2 个答案:

答案 0 :(得分:0)

sed line基本上是从copy&amp; amp;粘贴^ _ ^。请试一试:

kent$ (master|✔) echo '<font size="4" face="verdana, arial,geneva"><b>THIS IS MY TITLE</b></font>'|sed -r 's@(<font size="4" face="verdana, arial,geneva"><b>)([^<]*)(</b></font>)@\1<title>\2</title>\3@'
<font size="4" face="verdana, arial,geneva"><b><title>THIS IS MY TITLE</title></b></font>

答案 1 :(得分:0)

对我而言,这是有效的

sed  '/font *size *= *"4" *face/s|<b>\([^<]*\)</b>|<b><title>\1</title></b>|g'

我的想法是避免尽可能多的逃避,并分两步打破匹配和替换