足球数据的正则表达式

时间:2014-10-10 00:06:13

标签: regex csv sed

为什么我的正则表达式不起作用?它只返回原始文件。我的文件看起来像这样(几百行):

1    Germany    1765    0   Equal   
2    Argentina  1631    0   Equal   
3    Colombia   1488    1   Up  
4    Netherlands    1456    -1  Down    
5    Belgium    1444    0   Equal   
6    Brazil 1291    1   Up  
7    Uruguay    1243    -1  Down    
8    Spain  1228    -1  Down    
9    France 1202    1   Up  
...
192  US Virgin Islands  28  -1  Down    

我想要这个:

Germany,1
Argentina,2
Colombia,3
...
US Virgin Islands,192

这是我试过的正则表达式:

 sed 's/\([0-9]*\)\t\([a-zA-Z]*\)/\2,\1/g' <fifa.csv >fifa.csv

但它只返回原始文件。 编辑: 现在我试过

sed 's/\([0-9]*\)\t\([a-zA-Z]*\)/\2,\1/g' <fifa.csv >fifa.csv

得到了

,1 Germany,,1765Equal,0,
,2 Argentina,,1631Equal,0,
,3 Colombia,,1488Up,1,
,4 Netherlands,,1456-Down,1,
,5 Belgium,,1444Equal,0,

3 个答案:

答案 0 :(得分:1)

如果字段以制表符分隔,则可以尝试以下sed命令。

sed 's/^\([0-9]\+\)\t\([^\t]*\).*/\2,\1/' file

添加内联编辑选项-i以保存所做的更改。

sed -i 's/^\([0-9]\+\)\t\([^\t]*\).*/\2,\1/' file

^表示线锚的开始。 +会重复前一个字符一次或多次。基本sed使用BRE,因此您需要转义+以执行重复前一个字符一次或多次的功能。 [^\t]*匹配任何字符,但不匹配\t标签字符零次或多次。

答案 1 :(得分:1)

以下是您要找的内容。 -i选项指定要就地编辑文件。

sed -i 's/^\([0-9]\+\)\t\([^\t]*\).*/\2,\1/' fifa.csv

答案 2 :(得分:0)

awk '{print( $2 "," $1)}' YourFile

不是sed但更容易管理