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

标签 regex linux shell unix sed

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

 Brisbane, Queensland, Australia|BNE

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

我需要将其转换为类似的内容:

 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  

最佳答案

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

sed 's/, /|/' 

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

关于regex - Sed 仅删除第一次出现的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28640228/

相关文章:

r - 如何加速 data.table 中的字符串拆分操作

shell - UNIX shell 中的 < 和 cat 之间是什么?

macos - 如何以编程方式检测我的笔记本电脑是否已插入? (操作系统)

linux - 即使在构建失败后我还能使用 Linux 内核镜像吗

linux - "visudo: Warning: Cmnd_Alias ` NOPASSWD'引用但未定义,“是什么意思?

javascript - UltraEdit 查找和替换正则表达式

javascript - 我必须制作一个正则表达式,但无法弄清楚语法

php - 使用带有通配符的 MySQL REGEX anchor

regex - Linux grep/awk : Filter lines in a file, 但在 EOF 处克隆(保留或省略)尾随换行符

linux - 在内核模块中获取文件系统挂载点