巧用shell脚本批量替换字符串

作者:田逸(formyz)

需求描述

有一个网站,因为域名变更,除了需要重新做域名解析外,还需要对网站目录的包含原域名的文件进行替换。包含域名(主机名)关键字的文件相当的多,它们分布在不同目录的以html、php、phtml 结尾的文件中。数千个文件,如果手工来替换,根本无法完成,因此,使用shell是不二之选。

 

基本思路

总体上分两步进行:

1、文件查找。将网站所在根文档目录包含关键字域名的文件全部查找出来;

2、在查找出来的文件中进行全文替换。

 

因为此操作具有很大的风险性,需要事先做一个模拟测试,即准备一个临时目录,从网站根文档所在的目录复制少许文件及目录,这些文件及子目录的文件包含欲修改域名的关键字。先用find质量查找所有文本文件,然后进行域名关键字匹配并全部替换。

虽然查出来的文件,有些可能并不包含需要替换的域名关键字,但可以通过匹配的方式,把未包含域名关键字的文件过滤掉,我这里使用的工具是sed。

撰写脚本

脚本由指令find、sed及for循环构成,其内容十分简单,全部内容如下所示(/usr/bin/modify.sh):

#!/bin/bash

file_list=` find /tmp/formyz/ -name "*.php" -o -name "*.html" -o -name "*.phtml"`

for i in $file_list

do

sed -i 's#formyz.cn#formyz.com#g' $i

done

#!/bin/bash

file_list=` find /tmp/formyz/ -name "*.php" -o -name "*.html" -o -name "*.phtml"`

for i in $file_list

do

sed -i 's#formyz.cn#formyz.com#g' $i

done
exit 0

 

实施替换

考虑到风险问题,需按步骤逐一进行。

1、执行指令 sh -n /usr/bin/modify.sh 进行语法检查,确认脚本的书写正确性;

2、去掉选项“-n”,真正使脚本运行起来;

3、查验脚本运行结束后,测试目录“/tmp/formyz”里边的文本是否被替换。

4、修改脚本,将find 查找目录改成网站根文档所在的路径。任然先执行带选项“-n”的操作,检查一遍语法;

5、进入screen环境(避免远程ssh中断、shell也因此中断),真正执行脚本,完成替换。

结果验证

通过两个方向来验证替换的正确性及有效性。

1、查验网站根文档下,是否还存在原域名的关键字,指令如下:

grep -r “formyz.cn” *

没有任何匹配输出,为合格。

2、查验网站根文档下,是否存在替换后的域名关键字,指令如下:

grep -r “formyz.com” *

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Shell批量替换文件字符串是一种对一大批文件进行操作的方法,可以大大提高工作效率。Shell脚本语言是一种通用的脚本语言,它为用户提供了许多有用的工具和命令,可以使用这些工具和命令来完成文件字符串替换。 首先,使用grep命令查找包含需要替换字符串的文件,并将这些文件的路径写入一个文本文件。例如,使用以下命令将所有包含“abc”字符串的.txt文件路径写入List.txt文件: grep -rl 'abc' ./ > List.txt 接下来,使用sed命令进行文件的字符串替换。例如,将所有包含“abc”字符串的.txt文件中的“abc”字符串替换为“def”字符串: sed -i 's/abc/def/' `cat List.txt` 这个命令将读取前面生成的List.txt文件,找到里面列出的每个文件,并在每个文件中用“def”字符串替换所有的“abc”字符串。 还可以将sed命令与其他命令结合使用,实现更加复杂的操作。例如,使用grep命令筛选需要替换的文件,再使用xargs命令批量执行sed命令替换文件字符串: grep -rl 'abc' ./ | xargs sed -i 's/abc/def/' 这个命令将首先使用grep命令查找包含“abc”字符串的文件,然后使用xargs命令将这些文件路径传递给sed命令执行替换操作。 在使用Shell批量替换文件字符串时,需要注意以下几个问题: 1. 请在操作前备份您的文件,以避免误操作导致数据丢失。 2. 如果涉及到正则表达式,需要注意正则表达式的使用及其特殊字符的转义。 3. 请确保您有足够的权限对这些文件进行修改。 4. 请确保您的命令正确执行,并检查替换的文件是否符合您的预期。 总的来说,Shell批量替换文件字符串是一种比较方便和高效的方式,它可以在很短的时间内完成一批文本文件的替换工作。与其他的替换方法相比,它更具有灵活性,同时也不需要安装任何其他的软件就可以使用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

4/5$全真龙门

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值