本文笔者再linux中列举两种方法,windows列举一种方法,敬请参考至于在windows下直接修改配置文件的内容,笔者在命令行没有找到方法,但是笔者想可以使用python来完成。但是相对于直接修改配置文件,不如copy(windows)或cp(linux)优雅、安全、
以下的方法,可以结合脚本来进一步优化实现。配置文件修改完成后,把重拉进程写入脚本中,来完成自动化的 *** 作。
1、sed命令修改配置文件中的字段值
sed 全名为 stream editor,流编辑器,用程序的方式来编辑文本,功能相当的强大。
语法:sed -i 's/Search_String/Replacement_String/' Input_File
根据配置文件的字段,将需要修改的值直接使用sed -i 来直接对文本文件进行 *** 作,这个 *** 作有点危险。下面是将配置文件中的3306替换为3307,完成配置文件的修改。
这样 *** 作会直接修改原始文件,稍有不慎,那么风险是很大的。有没有可能将原始文件备份一下再修改呢?sed -i添加一个后缀(比如,-i.bak)就会生成一个原始文件的备份.bak文件。
这个后缀是可以自定义的,不局限于.bak,可以以日期来命名方便区分记忆。
那么还有一个问题,万一配置文件里面有相同的字段值,但是需求只是修改一处而已呢?默认情况下,sed 命令替换每一行第一次出现的模式,它不会替换行中的其他的匹配结果,在行中使用/1、/2……/n 等标志来代替相应的匹配。如果只需要替换某一处,那么可以将更多的字符串作为被替换的字符串。例如下面例子。
2、linux中cp复制需要的配置文件到目标配置文件
根据需求,修改配置文件来切换最直接,但是修改原始配置文件可能存在风险。于是可以换个思路,将需要的配置写入到不同的文件中,形成多配置文件,在不同场景进行切换不同的文件即可。
根据不同的应用场景需要切换配置文件,目标配置文件是my.cnf,在cp时会覆盖以前的配置文件。原始配置信息仍然存在,只是以另外的文件名包保存。
3、windows中copy复制需要的配置文件到目标配置文件
和 linux中cp复制一样,只是命令时copy而已。
最近在写SH脚本,实现一键部署,其中有些环境参数是会随着现场实际情况改变而变跟的,或者说修改一些配置文件的选项值,最终找到我们的sed 命令来解决(echo "">>filename 只能添加到文件最后)
sed 命令解释如下:
我们要使用的一般都是-e 或者 -i 其他的不怎么常用。关键点在于中间的脚本
脚本详情如下:
参考地址: https://www.cnblogs.com/ginvip/p/6376049.html
sed匹配全行,行首,行尾后替换或添加字符
sed 替换匹配开头字符的行
配置文件/etc/config.txt中有一行是
version=xx.xx.xx
每次进行版本发布,需要重新填写这个值,
可以用shell脚本中,加入sed命令来完成新版本号的替换
#首先定义一个新版本号的变量
var="version=6.1.1"
sed -i '/^version=/c'$var'' /etc/config.txt
i :直接修改读取的文件内容,而不是输出到终端。
^表示一行的开头
sed匹配某一行开头,替换整行内容
sed -i '/^cloud_server/ccloud_server_ip = update' name.txt
[root@centos8-38 opt]# cat sed.txt
coud_server xxdfdkjjjj1111 3333
coud_server 3333
coud_server dddd 3333
[root@centos8-38 opt]# coud="cloud_server=1111"
[root@centos8-38 opt]#
[root@centos8-38 opt]# sed '/^coud/c'$coud'' sed.txt
cloud_server=1111
cloud_server=1111
cloud_server=1111
sed 匹配部分替换
[root@centos8-38 opt]# sed 's/dddd/gggg/g' sed.txt
coud_server xxdfdkjjjj1111 3333
coud_server 3333
coud_server gggg 3333
sed 匹配行中部分内容,替换整行
[root@centos8-38 opt]# sed '/.*dddd.*/c'$coud'' sed.txt
coud_server xxdfdkjjjj1111 3333
coud_server 3333
cloud_server=1111
sed 也可以匹配行首或是行尾,中间部分内容后,
再行首或是行尾添加内容。
如下面:
666& 表示添加到行首,&666 表示添加到行尾。
[root@centos8-38 opt]# sed 's/^ccc/666&/g' sed.txt
coud_server xxdfdkjjjj1111 3333
coud_server 3333
coud_server dddd 3333
666cccc 2222
666cccc 111
[root@centos8-38 opt]# sed 's/^.*ddd.*/666&/g' sed.txt
coud_server xxdfdkjjjj1111 3333
coud_server 3333
666coud_server dddd 3333
cccc 2222
cccc 111
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)