做物流的用什么网站配货,做任务领佣金的网站源码,网站目录命名规则,海南行指海口网站开发文章目录 背景sed介绍演示结果 背景
服务器上搭建了SpringCloud微服务#xff0c;每个服务中都有application.properties文件#xff0c;在部署过程中需要修改每个微服务的redis.ip和redis.port。如果手动去修改会很麻烦#xff0c;所以下面写了一个shell脚本#xff08;基… 文章目录 背景sed介绍演示结果 背景
服务器上搭建了SpringCloud微服务每个服务中都有application.properties文件在部署过程中需要修改每个微服务的redis.ip和redis.port。如果手动去修改会很麻烦所以下面写了一个shell脚本基于sed 扩展正则表达式
本案例仅以修改单个application.properties为例读者后续可以在脚本加上读取各个服务中的application.properties 文件地址然后批量修改即可。
sed介绍
sed、grep、awk是Linux的文本三剑客具有强大的功能。sed 全名为 Steam Editor是一种流式编辑器它支持正则表达式和扩展正则表达式。 sed指令读取file.txt文件后按行读取并将内容存入模式空间(缓存再输出到终端界面上。 演示
为了演示application.properties放了redis的两个参数
sed -i s/匹配的内容/修改内容/g 文本sed -i 参数i是直接编辑原本的文件匹配模式匹配到指定文件
如果只是修改简单的字符串不涉及到.*, \等特殊字符例如使用sed指令修改上面的 redis.port端口可以直接执行:
[fy36localhost app]$ sed -E s/^redis.port.*/redis.port1234/g application.properties
redis.ip198.14.3.12
redis.port1234解析上面的代码中
^redis.port.* 其中的^redis.port表示开头必须是redis.port.表示匹配除了换行符之外的任意字符*表示前面匹配字符可以出现0次或多次第二个/表示要被替换的字符,也就是将redis.port改为1234/g 代表更改模式g代表global全局修改。所有匹配到的模式都将被替换。
注意上面的指令执行后并没有更改application.properties文件内容它只是将修改后的预览效果呈现在了屏幕上。除非使用-i选项才会直接修改文件。
直接修改application.properties
sed -i s/^redis.port.*/redis.port1234/g 现在将上述方法封装成函数
#! /bin/bash
function redisConfig(){
# 配置reids 的ip和端口
REDIS_IP$1
REDIS_PORT$2
# input the variable s value into the file abc.txt 下面的指令会将变量值写入到 temp.txt如果temp.txt不存在就会自动创建
echo $REDIS_IP temp.txt
#all the \ are used to transform the character .也就是使用反斜杠\字符将字符中的. 转义成 .本意而不是被sed指令解析为正则表达式。
sed -i s/\./\\./g temp.txt
# 读取文件中ip,将值写入到变量value.
REDIS_IP$(cat temp.txt)
echo 删除临时文件temp.txt
# 删除当前目录下生成的临时文件temp
rm ./temp.txt
# 关于变量需要使用 单引号包含变量否则将被识别为字符串
sed -i s/^redis.ip.*/redis.ip$REDIS_IP/g application.properties
sed -i s/^redis.port.*/redis.port$REDIS_PORT/g application.properties
}
# 调用上述方法修改
redisConfig 182.141.11.143 1124
~ 方法中将用户传入的变量ip和port存入到temp是因为后面的 sed -i 指令末尾需要指定文件名而无法用变量值去替换。所以将变量存入到了文件中。还有一点需要注意的是值是通过变量传入的如果写成$REDIS_IP它只会被识别成普通字符串.
结果
[fy36localhost app]$ sh setproperties.sh
删除临时文件temp.txt
[fy36localhost app]$ cat application.properties
redis.ip182.141.11.143
redis.port1124
[fy36localhost app]$ 在实际的application.properties中配置庞大而复杂如果手动去找指定配置参数并修改会非常麻烦。读者可以根据上述的方法步骤修改成自己想要的结果。