如何用sed或Perl为金额与相邻单词间添加空格?
解决金额与后续单词间添加空格的问题
sed 解决方案
使用扩展正则表达式的sed命令即可实现需求:
sed -E 's/([0-9]+\.[0-9])([A-Za-z])/\1 \2/g' /tmp/testfile2.txt
如果是GNU sed环境,也可以用-r参数替代-E:
sed -r 's/([0-9]+\.[0-9])([A-Za-z])/\1 \2/g' /tmp/testfile2.txt
正则逻辑说明
([0-9]+\.[0-9]):精准匹配金额部分(如2234.3),其中[0-9]+匹配整数位的多个数字,\.匹配小数点,[0-9]匹配小数点后的一位数字([A-Za-z]):匹配紧跟金额后的第一个字母- 替换为
\1 \2,即在金额与首字母之间插入空格
原命令问题分析
你之前的命令无法生效的原因:
- 正则分组错误拆分了小数点,且
.*贪婪匹配会导致匹配范围超出预期 - 命令末尾多余的空格,与原文本中金额和单词无空格的实际情况不符,导致无法命中目标内容
- 未准确限定金额与单词的分界规则
Perl 解决方案
用Perl命令也能简洁实现:
perl -pe 's/(\d+\.\d)([A-Za-z])/$1 $2/g' /tmp/testfile2.txt
这里\d等价于[0-9],正则逻辑与sed方案一致,写法更简洁。
测试效果
输入文本:
2234.3Hello 8938.3HeyYou 1239.0New
执行命令后输出:
2234.3 Hello 8938.3 HeyYou 1239.0 New
内容的提问来源于stack exchange,提问作者user19402144
相关产品推荐
相关产品推荐

