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