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
如您所见,它对字段进行计数以查看是否需要 |
。如果需要 |
则重建该行。
我的文本文件中有几个字符串有这种情况:
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
如您所见,它对字段进行计数以查看是否需要 |
。如果需要 |
则重建该行。