在正则表达式中,如何匹配特定水平的字符
位置?我想用位置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
答案 0 :(得分:3)
这里不需要使用正则表达式,使用awk可以轻松解决这类问题。请考虑以下代码:
awk -F"," 'NF==4{printf("%-5s%-8s%-12s %s\n", $1",", $2",", $3",", $4)}' in.file
答案 1 :(得分:2)
尝试类似:
s/^(.{3}),/$1, /
语法取决于您的语言。以上适用于Perl。在某些语言中,它是\1
而不是$1
。
大多数语言都可以更轻松地完成您想要的操作。 Perl和C具有printf
格式输出:
#another Perl example:
printf '%4s %7s %s %s', map({ $_ . ',' }, split(',',$line));