如何使用sed或awk或类似方法替换字符的每个奇数出现?

时间:2019-01-17 15:22:13

标签: linux awk sed

我有以下字符串:

“ 1,0,2,0,3,0,4,0,5,0,6,0,13,05,24233,55”。

如何使用awk或sed获取

“ 1.0,2.0,3.0,4.0,5.0,6.0,13.05,24233.55”?

我尝试使用

sed 's/,/./g' <<< "1,0,2,0,3,0,4,0,5,0,6,0,13,05,24233,55"
1.0.2.0.3.0.4.0.5.0.6.0.13.05.24233.55 

还有

sed 's/,/./2' <<< "1,0,2,0,3,0,4,0,5,0,6,0,13,05,24233,55"
1,0.2,0,3,0,4,0,5,0,6,0,13,05,24233,55

仅替换了第二项。我需要改变每一个奇怪的事情。 对于将来,用替换奇数次出现的代码是什么。 ?

感谢您的帮助

2 个答案:

答案 0 :(得分:1)

使用任何通过-E支持ERE的sed,例如GNU sed和OSX / BSD sed:

$ echo "1,0,2,0,3,0,4,0,5,0,6,0,13,05,24233,55" | sed -E 's/,([^,]+(,|$))/.\1/g'
1.0,2.0,3.0,4.0,5.0,6.0,13.05,24233.55

以上内容的灵感来自@PesaThe对我的原始答案的评论。

答案 1 :(得分:-1)

尝试一下:

最后:

any
  • sed 's/[,]$/?/' YourFile 放在,之间可以让您删除大多数具有正字面值的正则表达式行为(不适用于像[]这样的字符,需要以其他方式进行管理
  • 放入^就是要引用字符串的结尾

测试中的$意味着每次发生更改,您只希望1并在最后

对于内部:

g

由于存在交流,您需要循环和特殊测试