sed 只删除第一次出现的字符串

Sed remove only first occurence of a string

我的文本文件中有几个字符串有这种情况:

 Brisbane, Queensland, Australia|BNE

我知道如何使用 SED 命令,用另一个字符替换任何字符。这次想用竖线替换字符coma-space,只为了第一个匹配不同时影响国名

我需要将它转换成类似的东西:

 Brisbane|Queensland, Australia|BNE 

如您所见,只替换了第一个逗号-space,没有替换第二个,我保留了国家名称 "Queensland, Australia" 的完整。谁能帮我实现这个,谢谢。

这是我的文件示例:

 Brisbane, Queensland, Australia|BNE
 Bristol, United Kingdom|BRS
 Bristol, VA|TRI
 Brive-La-Gaillarde, France - Laroche|BVE
 Brno, Czech Republic - Bus service|ZDN
 Brno, Czech Republic - Turany|BRQ

如果你这样做:sed 's/, /|/' file.txt 不起作用。

输出应该是这样的:

  Brisbane|Queensland, Australia|BNE  

干脆不要使用 g 选项。您的 sed 命令应如下所示:

sed 's/, /|/' 

默认情况下,s 命令只会替换模式缓冲区中第一次出现的字符串 - 除非您传递 g 选项。

由于您没有发布测试文件的输出,我们只能猜测您需要什么。这里是可能的猜测:

awk -F", *" 'NF>2{[=10=]="|" OFS }1' OFS=", " file
 Brisbane|Queensland, Australia|BNE
 Bristol, United Kingdom|BRS
 Bristol, VA|TRI
 Brive-La-Gaillarde, France - Laroche|BVE
 Brno, Czech Republic - Bus service|ZDN
 Brno, Czech Republic - Turany|BRQ

如您所见,它对字段进行计数以查看是否需要 |。如果需要 | 则重建该行。