【问题标题】:find and replace text in multiple files [duplicate]在多个文件中查找和替换文本[重复]
【发布时间】:2012-08-29 23:19:36
【问题描述】:

可能重复:
Find and Replace Inside a Text File from a Bash Command

我被告知要更改网站中的所有标题标签。

因为标题标签在网站的所有页面中(超过30个)并且是静态的,所以我需要逐个文件地用新的标题替换这个标题。

所以我想知道是否有人知道可以实现此目的的脚本,而无需逐个手动执行。

例子:

/var/www/websitename/

在此路径内,有多个 .html 文件,我必须更改标题:

 <title>Old title</title>

收件人:

 <title>New title</title>

【问题讨论】:

  • 不会sed 解决您的问题吗?

标签: regex bash sed replace


【解决方案1】:

试试这个(在备份文件夹后,因为这里 sed 就地工作)。

find /var/www/websitename/ -name '*.html' -exec sed -i.bak 's/.title.Old title..title./<title>New title<\/title>/g' {} \;

【讨论】:

    【解决方案2】:
    perl -pi -e 's/\<title\>Old title\<\/title\>/\<title\>New title\<\/title\>/g' *.html
    

    【讨论】:

      【解决方案3】:

      您也可以使用记事本++。打开所有文件(只需标记它们并在记事本++上拖动或拖动整个文件夹),按 ctrl+f,切换到第二个选项卡(“替换”或类似的东西 - 我没有使用英文版),输入你的文本(你也可以使用正则表达式 - 查看选项)并单击“替换所有打开的文件”(或类似的东西)。它不像使用脚本那样强大的解决方案,但它更容易而且通常就足够了。

      【讨论】:

        【解决方案4】:

        试试这个:

        #!/bin/bash
        
        old_title="<title>Old title<\/title>"
        new_title="<title>New title<\/title>"
        
        for file in $(find . -name "*.html");
        do
            `sed -i "s/${old_title}/${new_title}/g" ${file}`
        done
        

        【讨论】:

          猜你喜欢
          • 2016-08-04
          • 2013-01-29
          • 2013-12-26
          • 2014-01-14
          • 2011-07-29
          • 2014-08-22
          • 1970-01-01
          • 2020-07-29
          • 1970-01-01
          相关资源
          最近更新 更多