用 sed 替换匹配后的字符

用 sed 替换匹配后的字符

我有一个字符串:

172.16.1.5] "80 EE 73 2F 0B 40

] "我需要用冒号替换后面的所有空格。目前使用sed -r 's/[ ]+/:/g'我得到的输出172.16.1.5]:"80:EE:73:2F:0B:40:,但是我需要保留括号后的第一个空格。

如何仅在使用 sed 匹配之后替换字符的所有实例?

答案1

有不同的可能方法。

条件循环,一次替换一个空格:

sed -e :1 -e 's/\(\] .*\) /\1:/; t1'

保存前缀、删除前缀、替换、恢复前缀:

sed '/\] /{ s//&\
/; h; s/.*\n//; s/ /:/g; H; g; s/\n.*\n//;}'

如果输入不包含 ,则两者都不会进行任何替换"] "

答案2

你可以用

echo '172.16.1.5] "80 EE 73 2F 0B 40' | sed -r 's/ +/:/g;s/\]:/\] /g'

具有

172.16.1.5] "80:EE:73:2F:0B:40

相关内容