首页 > 系统相关 >巧用shell脚本批量替换字符串

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

时间:2022-11-02 17:01:03浏览次数:68  
标签:formyz shell name 批量 文件 关键字 域名 替换 巧用

作者:田逸(formyz)

需求描述


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


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



基本思路


总体上分两步进行:​

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

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

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


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



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


撰写脚本


脚本由指令find、sed及for循环构成,其内容十分简单,全部内容如下所示:​

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


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



实施替换


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

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” *​



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


标签:formyz,shell,name,批量,文件,关键字,域名,替换,巧用
From: https://blog.51cto.com/sery/5817806

相关文章

  • 京东卖点图怎么修改,批量修改卖点图教程
    京东卖点图可以更换吗?怎么修改?这是很多京东新手商家共同的困扰,对于店铺的产品来说,卖点图是产品很重要的部分,买家在搜索的过程中,第一眼捕获信息的途径就是产品的卖点图。产......
  • shell编程之数组
    1什么是数组数组(Array)是有序的元素序列。若将有限个类型相同的变量的集合命名,那么这个名称为数组名。组成数组的各个变量称为数组的分量,也称为数组的元素,有时也称为下......
  • shell脚本 监听程序并重启
    #!/bin/bashecho"开始"echo"`date"+%Y-%m-%d%H:%M:%S"`正在杀进程..."ps-aux|grep你的程序名.py|grep-vgrep|awk'{print$2}'|xargskill-9echo"`......
  • shell编程之函数以及函数中的递归
    一、什么是函数使用函数可以避免代码重复使用函数可以将大的工程分割为若干小的功能模块,代码的可读性更强类似于Java的方法    二、获取函数的返回值return表......
  • docker 批量删除镜像
    删除虚悬镜像列出REPOSITORY和TAG均为<none>的虚悬镜像:$dockerimages--filterdangling=trueREPOSITORYTAGIMAGEIDCREATEDSIZE<none>......
  • shell脚本三剑客之awk
    awk的概述1、awk的概念逐行读取文本,默认以空格或tab键为分隔符进行分隔,将分隔所得的各个字段保存到内建变量中,并按模式或者条件执行编辑命令sed命令常用于一整行的处理,......
  • 通过ansible shell模块运行java程序问题记录
    问题1启动java进程没有反应描述我是通过shell模块执行一个启动脚本,脚本中通过java命令启动springboot的jar包,脚本的核心但是运行结束后没有反应。看起来进程并没有被执......
  • 批量导入1W张照片怎样最快?——排列分布法
    HI,大家好,我是Excel教案。HR的小伙伴,可能经常会收到这样的任务20分钟后,弄好了没啊?我咖啡都喝完啦~其实使用【格式】中的【分布】功能,可以一次性将皂片全部导入,并将皂片和姓名......
  • 批量打印与导出,皕杰报表新版本可打包输出报表
    为了满足批量输出报表功能,皕杰报表的最新版本中内置了一个批量处理的servlet(类名称:bios.report.engine.output.ReportBundler,映射名称:ReportBulker),其功能就是把多张报表捆扎......
  • shell语法4-printf命令、test命令和判断符号[]、逻辑运算符&&和||
    一、printf命令printf命令用于格式化输出,类似于C/C++中的printf函数。默认不会在字符串末尾添加换行符!!!例如:printf"%10d.\n"123 #占10位,右对齐printf"%-10.2f.\n"......