如何用sed将XML中values的空格分隔值转为A/B/C属性格式?
解决方案
方法一:多步sed替换
基于你已有的命令,追加两次替换即可完成转换:
sed -e 's#<values=#<values A="#' -e 's# # B="#' -e 's# # C="#' input.txt
- 第一步:将
<values=替换为<values A=",和你最初的命令一致 - 第二步:把第一个空格替换为
B=",给第二个数值加上B属性标记 - 第三步:把第二个空格替换为
C=",给第三个数值加上C属性标记
方法二:精准分组匹配替换
如果要避免行内多余空格的干扰,可以用sed的正则分组精准捕获三个数值:
sed 's#<values=\([^ ]*\) \([^ ]*\) \([^ ]*\) />#<values A="\1" B="\2" C="\3" />#' input.txt
\([^ ]*\):匹配单个非空格的数值片段,并用括号分组保存\1/\2/\3:在替换时分别引用三个分组的内容,直接套入目标属性格式
转换后效果
执行上述任一命令后,输入文本会被转换为你需要的格式:
<data> <values A="11.0200004578" B="-1.17999994755" C="-16.1200008392" /> <values A="97.0999984741" B="-0.449999988079" C="2.16000008583" /> <values A="41.7299995422" B="60.6699981689" C="43.75" /> </data>
内容的提问来源于stack exchange,提问作者M-Rick
相关产品推荐
相关产品推荐

