2

我有一个包含此文件的文件,<!-- 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

4 回答 4

4

使用像#这样的其他字符作为分隔符而不是/

sed 's#<!-- CordovaVersion -->#<script src="cordova-1.7.0.js" type="text/javascript"></script>#g' junk4 > junk4_modified
于 2012-06-07T08:53:26.077 回答
2

首先,你不需要像李考"所说的那样多余的 s 。其次,您需要知道 sed 如何理解什么被替换为什么:

s/this/that/flags

这意味着用额外的标志替换thisthat例如g意味着无处不在)。实际上 the/不是一个特殊字符,你可以使用任何其他字符,例如#scai的:

s#this#that#flags

但问题是什么?想象一下你想thisth/at. 然后 sed 看到这个:

s/this/th/at/flags

并得到正确的混淆。你想用 替换thisth?比什么at/flags意思?你想用 替换this/that?还是thisth/at? 没有办法说。

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

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

(当然,如果我们使用 # and insidethis或者that有一个#你应该已经逃脱了#

你可以在这里阅读更多关于 sed 的信息,包括它的特殊字符。

于 2012-06-07T09:23:52.827 回答
1

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

于 2012-06-07T08:54:08.697 回答
1

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

于 2012-06-07T08:54:20.163 回答