我有一个包含带有表单的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
我这样做了吗?我似乎无法让它发挥作用!任何指针都非常感谢!
答案 0 :(得分:0)
您的sed
命令需要删除一些转义符。 f
和>
都不需要转义:
sed -E "s/(<form>)(.*)(<\/form>)/\1$REPLACEWITH\3/"
在POSIX规范下,\>
的含义未定义。如果您使用的是GNU sed
,则将其解释为单词的结尾。但在您的情况下,您需要一个文字>
。
在sed
中,\f
表示您需要文字f
时的换页。
此外,REPLACEWITH
附近的斜杠需要转义:
REPLACEWITH="<form method='post' action=''><?php include("form.php"); ?><\/form>"
未转义,这会混淆替代命令。
如果使用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