查找并替换多个文件中的文本

时间:2012-09-05 09:10:42

标签: regex bash sed replace

  

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

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

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

所以我想知道是否有人知道一个可以实现这一目标的脚本而无需一个一个地手动完成。

示例:

/var/www/websitename/

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

 <title>Old title</title>

要:

 <title>New title</title>

4 个答案:

答案 0 :(得分:3)

试试这个(在备份文件夹之后,因为这里sed就位)。

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

答案 1 :(得分:2)

perl -pi -e 's/\<title\>Old title\<\/title\>/\<title\>New title\<\/title\>/g' *.html

答案 2 :(得分:0)

您也可以使用记事本++。打开所有文件(只需标记它们并拖动记事本++或拖动整个文件夹),按ctrl + f,切换到第二个标签(“替换”或类似的东西 - 我不使用英文版),输入你的文字(你也可以使用regexp - 请参阅选项)并单击“替换所有打开的文件”(或者像这样)。它不像使用脚本那样功能强大,但它更容易,通常也足够了。

答案 3 :(得分:0)

试试这个:

#!/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