比赛结束后取代

时间:2016-08-07 13:01:28

标签: linux unix sed

我有这样的文件:

Antwerpen;stad;Antwerpen;204,51;483505;Antwerpen;Berendrecht-Zandvliet-Lillo;Deurne;Borgerhout;Merksem;Ekeren;Berchem;Hoboken;Wilrijk
Gent;stad;Oost-Vlaanderen;156,18;243366;Gent;Mariakerke;Drongen;Wondelgem;Sint-Amandsberg;Oostakker;Desteldonk;Mendonk;Sint-Kruis-Winkel;Gentbrugge;Ledeberg;Afsnee;Sint-Denijs-Westrem;Zwijnaarde
Brugge;stad;West-Vlaanderen;138,40;116741;Brugge;Koolkerke;Sint-Andries;Sint-Michiels;Assebroek;Sint-Kruis;Dudzele;Lissewege

我想要实现的是在一个数字后跟&#34 ;;"然后是文字:

(例如:483505;安特卫普)

我想替换每个";"使用","。

结果应如下所示:

Antwerpen;stad;Antwerpen;204,51;483505;Antwerpen, Berendrecht-Zandvliet-Lillo, Deurne, Borgerhout, Merksem, Ekeren, Berchem, Hoboken, Wilrijk
Gent;stad;Oost-Vlaanderen;156,18;243366;Gent, Mariakerke, Drongen, Wondelgem, Sint-Amandsberg, Oostakker, Desteldonk, Mendonk, Sint-Kruis-Winkel, Gentbrugge, Ledeberg, Afsnee, Sint-Denijs-Westrem, Zwijnaarde
Brugge;stad;West-Vlaanderen;138,40;116741;Brugge, Koolkerke, Sint-Andries, Sint-Michiels, Assebroek, Sint-Kruis, Dudzele, Lissewege

如何使用sed实现这一目标?

1 个答案:

答案 0 :(得分:0)

只需使用awk:

$ awk 'match($0,/[0-9];[[:alpha:]](.*)/,a) { gsub(/;/,", ",a[1]); $0 = substr($0,1,RSTART+2) a[1] } 1' file
Antwerpen;stad;Antwerpen;204,51;483505;Antwerpen, Berendrecht-Zandvliet-Lillo, Deurne, Borgerhout, Merksem, Ekeren, Berchem, Hoboken, Wilrijk
Gent;stad;Oost-Vlaanderen;156,18;243366;Gent, Mariakerke, Drongen, Wondelgem, Sint-Amandsberg, Oostakker, Desteldonk, Mendonk, Sint-Kruis-Winkel, Gentbrugge, Ledeberg, Afsnee, Sint-Denijs-Westrem, Zwijnaarde
Brugge;stad;West-Vlaanderen;138,40;116741;Brugge, Koolkerke, Sint-Andries, Sint-Michiels, Assebroek, Sint-Kruis, Dudzele, Lissewege

以上使用GNU awk为第3个arg匹配()。