【问题标题】:Replace content inbetween <form> tags with sed用 sed 替换 <form> 标签之间的内容
【发布时间】:2014-09-29 23:38:47
【问题描述】:

我有一个文件夹,其中包含带有表单的 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

我这样做对吗?我似乎无法让它工作!任何指针都非常感谢!

【问题讨论】:

标签: bash perl sed scripting


【解决方案1】:
  1. 您的sed 命令需要删除一些转义符。 f&gt; 都不需要转义:

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

    在 POSIX 规范下,\&gt; 的含义是未定义的。如果您使用 GNU sed,它会被解释为单词的结尾。但在你的情况下,你需要一个文字 &gt;

    sed 中,\f 表示换页,而您需要文字 f

  2. 另外,REPLACEWITH 末尾附近的斜线需要转义:

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

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

如果对替换命令使用不同的分隔符,则可以删除转义斜杠的需要。例如,使用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

【讨论】:

  • @user3547033 它为我运行。我刚刚再次测试它,它仍然为我运行。你看到什么错误?您使用的脚本是否与我上面显示的“完整脚本”完全相同?
  • @user3547033 我将代码从您更新的问题复制到了我的计算机上,它对我来说运行良好。它会给你任何错误信息吗?您使用的是什么操作系统? (OSX 上的 Unix 实用程序通常存在细微的不兼容性。)
猜你喜欢
  • 1970-01-01
  • 2011-11-03
  • 1970-01-01
  • 1970-01-01
  • 2022-01-06
  • 1970-01-01
  • 1970-01-01
  • 2022-12-08
  • 1970-01-01
相关资源
最近更新 更多