如何用Shell命令为属性键中被点包围的数字添加双引号?
问题:为属性键中的独立数字节点添加双引号
原始属性配置:
connection.party= 0.0.0.0 remote.app.328.port= 5432 remote.server.url="https://someurl.com?q=78.78" remote.conncetion.7="basic" remote.52.base= "local" level1.34access23="true" 88.location.code=24 location.234.code.52=24
期望转换结果:
connection.party= 0.0.0.0 remote.app."328".port= 5432 remote.server.url="https://someurl.com?q=78.78" remote.conncetion."7"="basic" remote."52".base= "local" level1.34access23="true" "88".location.code=24 location."234".code."52"=24
要求说明:
- 仅为属性键中前后被点包裹、位于键开头或结尾的独立数字添加双引号
- 与文本相连的数字(如
328access23)保持不变 - 属性值部分(等号右侧内容)完全不修改
之前尝试的sed命令(会错误给所有数字加引号,不符合需求):
sed -E 's/^([^=]+)\.([0-9]+)/\1."\2"/' input.properties
解决方案
可以使用多规则匹配替换的sed命令,精准定位需要加引号的独立数字节点:
sed -E ' s/^([0-9]+)\./"\1"./; s/\.\([0-9]+\)\./."\1"./g; s/\.\([0-9]+\)=$/\."\1"=/ ' input.properties
命令拆解:
s/^([0-9]+)\./"\1"./:匹配键开头的独立数字(比如88.location里的88),替换成"88".s/\.\([0-9]+\)\./."\1"./g:全局匹配被两个点夹着的独立数字(比如app.328.port里的328、location.234.code.52里的234),替换成."328".s/\.\([0-9]+\)=$/\."\1"=/:匹配键末尾的独立数字(比如conncetion.7=里的7、code.52=里的52),替换成."7"=
这个命令会自动跳过和文本连在一起的数字,同时完全保留等号右侧的属性值,完全符合你的要求。
内容的提问来源于stack exchange,提问作者Débora
相关产品推荐
相关产品推荐

