![用 sed 替换匹配后的字符](https://linux22.com/image/160698/%E7%94%A8%20sed%20%E6%9B%BF%E6%8D%A2%E5%8C%B9%E9%85%8D%E5%90%8E%E7%9A%84%E5%AD%97%E7%AC%A6.png)
我有一个字符串:
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