Sed - 替换每行的最后一次匹配
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Sed - 替换每行的最后一次匹配相关的知识,希望对你有一定的参考价值。
所以我有以下文件:
Carlton 3053
Carlton North 3054
Docklands 3008
East Melbourne 3002
Flemington 3031
Kensington 3031
Melbourne 3000
Melbourne 3004
North Melbourne 3051
St Kilda East 3183
我想用连字符替换数字前面的最后一个空格,这是我得到的最接近的空格
cat file.txt | sed -r 's/ /-/g'
但这会用 - 替换所有空格 - 我希望输出看起来像这样:
Carlton-3053
Carlton North-3054
Docklands-3008
East Melbourne-3002
Flemington-3031
Kensington-3031
Melbourne-3000
Melbourne-3004
North Melbourne-3051
St Kilda East-3183
有任何想法吗?
答案
那这个呢?
$ sed -r 's/ ([^ ]*)$/-1/' file
Carlton-3053
Carlton North-3054
Docklands-3008
East Melbourne-3002
Flemington-3031
Kensington-3031
Melbourne-3000
Melbourne-3004
North Melbourne-3051
St Kilda East-3183
([^ ]*)$
捕获空间+“任何不是直到行尾的空间”。- qazxsw poi打印连字符+捕获“任何不是直到行尾的空格”。
另一答案
你知道如何更换第一个空间,对吗?
-1
另一答案
你的尝试很接近。您只需要在空间之前捕获所有内容,并在替换中需要反斜杠引用。不知道为什么你逃脱了空间和连字符。
rev inputfile | sed 's/ /-/' | rev
为了您的输入,它产生:
sed -r 's/(.*) /1-/g' inputfile
另一答案
这是一个Carlton-3053
Carlton North-3054
Docklands-3008
East Melbourne-3002
Flemington-3031
Kensington-3031
Melbourne-3000
Melbourne-3004
North Melbourne-3051
St Kilda East-3183
变化:
awk
另一答案
以下也适用于OSX,因为那里没有awk '{$NF="-"$NF;sub(/ -/,"-")}1' file
Carlton-3053
Carlton North-3054
Docklands-3008
East Melbourne-3002
Flemington-3031
Kensington-3031
Melbourne-3000
Melbourne-3004
North Melbourne-3051
St Kilda East-3183
:
sed -r
以上是关于Sed - 替换每行的最后一次匹配的主要内容,如果未能解决你的问题,请参考以下文章