用sed </form>替换<form>标签之间的内容

时间:2014-08-06 21:25:01

标签: bash perl sed scripting

我有一个包含带有表单的html文件的文件夹,我需要使用一组不同的表单标签来查找和替换表单标签。我目前正在使用sed但无法使用此代码:

#!/bin/bash
REPLACEWITH="<form method='post' action=''><?php include('form.php'); ?><\/form>"
sed -r "s/(<form>)(.*)(<\/form>)/\1$REPLACEWITH\3/" -i index.html

我这样做了吗?我似乎无法让它发挥作用!任何指针都非常感谢!

1 个答案:

答案 0 :(得分:0)

  1. 您的sed命令需要删除一些转义符。 f>都不需要转义:

     sed -E "s/(<form>)(.*)(<\/form>)/\1$REPLACEWITH\3/" 
    

    在POSIX规范下,\>的含义未定义。如果您使用的是GNU sed,则将其解释为单词的结尾。但在您的情况下,您需要一个文字>

    sed中,\f表示您需要文字f时的换页。

  2. 此外,REPLACEWITH附近的斜杠需要转义:

    REPLACEWITH="<form method='post' action=''><?php include("form.php"); ?><\/form>"
    

    未转义,这会混淆替代命令。

  3. 如果使用for substitute命令使用不同的分隔符,则可以删除转义斜杠的需要。例如,使用s|old|new|代替s/old/new/

    正如评论者所指出的,正则表达式是一种有限的工具,用于编辑html的所有潜在复杂性。但是,如果你的html文件具有相对简单和可预测的形式,那么正则表达式可能是最简单的解决方案。

    完整的脚本

    REPLACEWITH="<form method='post' action=''><?php include("form.php"); ?><\/form>"
    sed -i -r "s/(<form>)(.*)(<\/form>)/\1$REPLACEWITH\3/"  target_file.html