在sed中搜索并替换html标签(带斜杠)

时间:2012-06-07 08:47:15

标签: linux sed

我有一个包含此<!-- CordovaVersion -->的文件 我想用<script src="cordova-1.7.0.js" type="text/javascript"></script>

替换它

我试过

sed 's/"<!-- CordovaVersion -->"/"<script src="cordova-1.7.0.js" type="text/javascript"></script>"/g' junk4 > junk4_modified

但它似乎不起作用。有什么帮助吗?

4 个答案:

答案 0 :(得分:4)

使用之类的其他字符作为分隔符,而不是 /

sed 's#<!-- CordovaVersion -->#<script src="cordova-1.7.0.js" type="text/javascript"></script>#g' junk4 > junk4_modified

答案 1 :(得分:2)

首先,LiKao表示,您不需要额外的"。其次,你需要知道sed如何理解什么被替换为:

s/this/that/flags

这意味着将this替换为that并添加其他标记(例如g表示无处不在)。实际上/不是特殊字符,您可以使用#之类的任何其他字符作为scai说:

s#this#that#flags

但是问题是什么?想象一下,您想要将this替换为th/at。然后sed看到了这个:

s/this/th/at/flags

并且对此感到困惑。您是否尝试将this替换为th?比at/flags意味着什么?您是否尝试将this/th替换为at?或thisth/at一起使用?没有办法说出来。

这就是你应该使用\转义特殊字符的原因。由于我们使用/作为分隔符,因此当它不是分隔符时我们必须将其转义:

sed 's/<!-- CordovaVersion -->/<script src="cordova-1.7.0.js" type="text\/javascript"><\/script>/g' junk4 > junk4_modified

(当然,如果我们使用#并且thisthat内部有#您应该已经转义#

您可以阅读here了解有关sed的更多信息,包括其特殊字符。

答案 2 :(得分:1)

sed 's/<!--\s*CordovaVersion\s*-->/<script src="cordova-1.7.0.js" type="text\/javascript"><\/script>/g' junk4 > junk4_modified

答案 3 :(得分:1)

使用此行,sed将搜索"<!-- CordovaVersion -->"并尝试将其替换为<script src="cordova-1.7.0.js" type="text/javascript"></script>"。但您的原始文档不包含"。只需从sed命令中删除它们即可。