相关文章推荐
傻傻的豆浆  ·  基于 Azure ...·  1 年前    · 
绅士的花卷  ·  Java ...·  1 年前    · 
大鼻子的荒野  ·  HashMap ArrayList 和 ...·  1 年前    · 
Bristol, VA|TRI Brive-La-Gaillarde, France - Laroche|BVE Brno, Czech Republic - Bus service|ZDN Brno, Czech Republic - Turany|BRQ

If you do: sed 's/, /|/' file.txt doesn't work.

输出应该是这样的。

  Brisbane|Queensland, Australia|BNE  
    
5 个评论
除非你使用g修改器,否则替换只替换该行的第一个匹配。所以这就是默认的行为,你遇到的问题是什么?
问题是,我希望每一行只替换第一个匹配的coma-space字符,而不是第二行,以保持完整的国家名称,就像这样。Brisbane|Queensland, Australia|BNE。因为每一行都有两个逗号空格。
请同时发布预期的输出
这是否意味着你只想要文件的第一行?
不,我说的是每一行,请正确阅读所有的评论。
regex
linux
shell
unix
sed
Nizar B.
Nizar B.
发布于 2015-02-21
2 个回答
hek2mgl
hek2mgl
发布于 2015-02-21
已采纳
0 人赞同

只要不使用g选项即可。你的sed命令应该看起来像这样。

sed 's/, /|/' 

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

看来不行了,这不是一个简单的昏迷。这是一个昏迷,后面是一个空格。
不知道,这个话题看起来很清楚,但人们仍然在投下票。
完美的工作,忘了添加输出重定向,以看到结果,非常感谢你
不客气。请不要试图重定向到原始文件(你最终会得到一个空文件。 如果你想修改原始文件,请使用-i选项代替)
我没有给你降权,但话题并不明确,因为除了他输出的第一行之外,OP并没有发过其他的帖子,而且可能有其他的方式来解释他的意思。
Jotne
Jotne
发布于 2015-02-21
0 人赞同

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

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