我的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
中可能存在空间问题,但我不知道如何解决它。
答案 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');
不是文件中的最后一行时才有效!