Sed仅删除第一次出现的字符串

时间:2015-02-20 23:53:15

标签: regex linux shell unix sed

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

 Brisbane, Queensland, Australia|BNE

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

我需要将其转换为类似的东西:

 Brisbane|Queensland, Australia|BNE 

正如你所看到的,只有第一个昏迷空间被替换,而不是第二个,我保留了国家名称"昆士兰,澳大利亚"完成。有人可以帮助我实现这一目标,谢谢。

以下是我的文件示例:

 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  

2 个答案:

答案 0 :(得分:3)

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

sed 's/, /|/' 

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

答案 1 :(得分:1)

由于您尚未发布测试文件的输出,我们只能猜测您需要的内容。这可能是猜测:

awk -F", *" 'NF>2{$0=$1"|"$2 OFS $3}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

如您所见,计算字段以查看是否需要|。如果它需要|,那么重建该行。