如何匹配正则表达式中的水平位置?

时间:2013-03-13 08:27:11

标签: regex

在正则表达式中,如何匹配特定水平的字符 位置?我想用位置n替换逗号,后面跟一个逗号 三个空格,即

s/,/, /        # replace ',' at position n=4 with ', '

但这些正则表达式仍然会错过水平位置约束。

一起
s/,/,  /       # replace ',' at position n=3 with ',  '
s/,/,   /      # replace ',' at position n=2 with ',   '

我想用它来重新格式化数据列,来自

1,10000,0.187929453,10000
162,28000,0.045417083,28000
22,100000,0.020914811,100000
64,1000,0.234950091,10000
65,46000,0.037523632,46000
66,118000,0.015378538,118000

1,   10000,  0.187929453, 10000
162, 28000,  0.045417083, 28000
22,  100000, 0.020914811, 100000
64,  1000,   0.234950091, 10000
65,  46000,  0.037523632, 46000
66,  118000, 0.015378538, 118000

2 个答案:

答案 0 :(得分:3)

这里不需要使用正则表达式,使用awk可以轻松解决这类问题。请考虑以下代码:

awk -F"," 'NF==4{printf("%-5s%-8s%-12s %s\n", $1",", $2",", $3",", $4)}' in.file

现场演示:http://ideone.com/bXJXX5

答案 1 :(得分:2)

尝试类似:

s/^(.{3}),/$1,   /

语法取决于您的语言。以上适用于Perl。在某些语言中,它是\1而不是$1

大多数语言都可以更轻松地完成您想要的操作。 Perl和C具有printf格式输出:

#another Perl example:
printf '%4s %7s %s %s', map({ $_ . ',' }, split(',',$line));