0

我需要在许多文件中查找和替换某些文本。我正在尝试使用 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>我找到的东西周围添加一个标签。

例如,如果文本是这样的:

<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'
4

2 回答 2

0

sed 线基本上是从复制和粘贴 ^_^ 构建的。请尝试一下:

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>
于 2013-03-18T21:36:13.027 回答
0

对我来说这有效

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

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

于 2013-03-18T21:41:11.273 回答