如何用sed在固定字母+随机数字的字符串间插入空格?
解决「固定字母+随机数字」模式插入空格的sed方案
问题分析
你需要将类似A01B02的格式替换为A01 B02,之前尝试的sed命令都存在逻辑错误:
sed -i 's/A.*B.*/A.* B.*/g' file:.*是贪婪匹配,且替换部分是字面字符串,会把匹配内容直接替换成A.* B.*,完全不符合预期sed -i 's/A*B*/A* B*/g' file:A*/B*匹配0个或多个对应字母,替换逻辑完全错误sed -i 's/A.B./A. B./g' file:.匹配任意单个字符,替换部分的.是字面量,会破坏原有数字sed -i 's/A[0-9]B[0-9]/A[0-9] B[0-9]/g' file:替换部分的[0-9]是字面字符串,不是引用匹配到的数字,会导致错误替换
正确的sed命令
基础POSIX兼容版本
sed -i 's/A\([0-9]\+\)B\([0-9]\+\)/A\1 B\2/g' file
A\([0-9]\+\):捕获A后面的1个或多个数字,存为分组1B\([0-9]\+\):捕获B后面的1个或多个数字,存为分组2A\1 B\2:将分组1、分组2的内容放回,中间插入空格
GNU sed扩展正则版本(更简洁)
sed -i -E 's/A([0-9]+)B([0-9]+)/A\1 B\2/g' file
使用-E启用扩展正则,无需对括号转义,写法更直观。
内容的提问来源于stack exchange,提问作者diggidre
相关产品推荐
相关产品推荐

