如何用sed插入html标签?

时间:2015-05-15 21:10:58

标签: regex linux bash replace sed

我的HTML文档包含此内容

<!--START-->
Some unimportant content - line1
Some unimportant content - line2
Some unimportant content - ...
<!--END-->

我想替换评论 START-END

之间的内容

所需的输出

<!--START-->
<script type="text/javascript" src="somefile.js"></script>
<!--END-->

我知道如何使用sed unix命令替换注释之间的内容,但是我将问题替换为script标记。

这是命令

REPLACEMENT="<script type=\"text\/javascript\" src=\"somefile.js\"><\/script>"
STARTTAG="START"
ENDTAG="END"
EXPRESSION='/'"$STARTTAG"'/{p;:a;N;/'"$ENDTAG"'/!ba;s/.*\n/'"$REPLACEMENT"'\n/};p'
sed -n $EXPRESSION -i target.html

当我运行它时,它以错误unterminated s' command结束。 REPLACEMENT中可能存在空间问题,但我不知道如何解决它。

2 个答案:

答案 0 :(得分:1)

我假设您的代码START和END之间只有一行。

尝试使用GNU sed:

REPLACEMENT="<script type=\"text\/javascript\" src=\"somefile.js\"><\/script>"
STARTTAG="START"
ENDTAG="END"
EXPRESSION="/$STARTTAG/,/$ENDTAG/{/$STARTTAG/{p;d};/$ENDTAG/{p;d};s/.*/$REPLACEMENT/}"

sed -i "$EXPRESSION" target.html

输出(target.html):

<!--START-->
<script type="text/javascript" src="somefile.js"></script>
<!--END-->

或:

REPLACEMENT="<script type=\"text\/javascript\" src=\"somefile.js\"><\/script>"
STARTTAG="START"
ENDTAG="END"
EXPRESSION="/$STARTTAG/p;s/.*$ENDTAG.*/$REPLACEMENT\n&/p"   
sed -i -n "$EXPRESSION" file

答案 1 :(得分:1)

这可能适合你(GNU sed):

sed -e "/$STARTTAG/p;/$ENDTAG/h;/$STARTTAG/,/$ENDTAG/c$REPLACEMENT" -e 'x;/./{p;z};x' file

这会在STARTTAG首次遇到时打印ENDTAG并将ENDTAG保存在要更改的行后打印的保留空间中。

N.B。仅当SELECT date('now'); 不是文件中的最后一行时才有效!