在字母和数字之间插入逗号

时间:2016-05-25 23:14:02

标签: regex bash perl

我是编程的初学者,并且有关于正则表达式匹配的快速问题,并且想知道bash或perl中是否存在快速解决方案以解决以下问题:

我的文件看起来像这样。

Boy0.545, 35, 63, 75  
Girl, 63, 723, 845, 45  
Human13, 453, 634, 43

如果每个字母后面都有一个数字直接跟着一封信,我该如何插入逗号?我正在阅读一些正则表达式,感觉像这样的东西可以工作:/ ^ [:alpha:] [:digit:] $ /但我不确定如何继续。我想要

Boy, 0.545, 35, 63, 75  
Girl, 63, 723, 845, 45  
Human, 13, 453, 634, 43

感谢任何帮助。为这个简单的问题道歉!谢谢!

2 个答案:

答案 0 :(得分:6)

试试这个:

$ cat testfile
Boy0.545, 35, 63, 75
Girl, 63, 723, 845, 45
Human13, 453, 634, 43

$ sed 's/\([A-Za-z]\)\([0-9]\)/\1, \2/g' testfile
Boy, 0.545, 35, 63, 75
Girl, 63, 723, 845, 45
Human, 13, 453, 634, 43

\([A-Za-z]\)\([0-9]\)捕获组,分别由\1\2在替换部分中引用。所以我们在一封信之后立即查找一个数字,并用字母替换它,然后用逗号替换它,然后用空格代替数字。

您还可以使用帖子中提到的 POSIX字符类

sed 's/\([[:alpha:]]\)\([[:digit:]]\)/\1, \2/g' testfile

答案 1 :(得分:3)

您需要使用捕获组将字母和数字复制到替换中。

perl -pe 's/([a-z])(\d)/$1, $2/i'

$1$2将替换为原始字符串中与括号中的模式匹配的部分。