为什么我的正则表达式不起作用?它只返回原始文件。我的文件看起来像这样(几百行):
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,
答案 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但更容易管理