【问题标题】:How to find/replace a <script> HTML tag recursively in all files with Bash/sed? [duplicate]如何使用 Bash/sed 在所有文件中递归地查找/替换 <script> HTML 标记? [复制]
【发布时间】:2013-12-07 01:17:18
【问题描述】:

我必须在目录内的所有文件中递归地查找和替换“脚本”HTML 标记,我想使用 bash 命令和 sed 来完成。标签是

< script type="text/javascript" src="http://www.example.com/file.php">< /script>

你能帮帮我吗? 谢谢

编辑 正如有人所说,我还没有指定我想要的替代品。事实上,“替换”不是正确的词,因为我只是想删除 HTML 标记,用空格或空字符替换它。

【问题讨论】:

    标签: bash recursion replace sed


    【解决方案1】:

    在 sed 中,您可以使用 sed "s|pattern|replacement|g" 将所有“模式”替换为“替换”

    请给出预期的输出,以帮助其他人更好地理解您的需求

    【讨论】:

    • 谢谢!使用这种替代语法,我只需要转义 " 字符就可以了。
    【解决方案2】:

    根据所提供的信息,您似乎想替换给定目录中许多 HTML 文件中的特定字符串。

    您可以使用 sed 执行此操作的一种方法如下:

    sed -i.rep 's/script/replacestring/g' *.html
    

    请注意,-i 选项将更改文件并创建一个具有相同名称、扩展名为 .rep 且包含原始内容的备份文件。如果您不想这样做,您可能需要遍历文件并执行 sed 并将结果写入临时文件。完成后,您可以检查它们并重命名它们。例如:

    for i in *.html
    do
      sed 's/script/replacestring/g' $i > rep$i
    done
    

    最后,你会有很多rep*.html文件对应被替换的文件。

    您可以按如下方式重命名/覆盖它们:

    for i in rep*.html
    do
      mv $i `echo $i|sed s/rep//`
    done
    

    上面的 sed 表达式会将 rep 文件重命名为其原始名称并覆盖它们。

    【讨论】:

    • 这里的问题是标签字符串中充满了需要转义的字符,但我不知道如何正确地做到这一点。我尝试在每个 /、"、 和 : 前面加上一个反斜杠,但我没有工作:表达式不匹配,文件没有更改。相反,让字符串保持原样让 sed 返回一个错误。
    猜你喜欢
    • 1970-01-01
    • 2013-04-01
    • 2019-03-29
    • 2015-06-12
    • 2010-12-07
    • 2011-12-24
    相关资源
    最近更新 更多