所以我有以下文件:
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
有什么想法吗?
答案 0 :(得分:7)
这个怎么样?
$ 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
([^ ]*)$
捕获空间+“任何不是空间直到行尾”。-\1
打印连字符+抓住的“任何不是直到行尾的空格”。答案 1 :(得分:6)
你知道如何更换第一个空格,对吧?
rev inputfile | sed 's/ /-/' | rev
答案 2 :(得分:5)
你的尝试很接近。您只需要在空间之前捕获所有内容,并在替换中需要反斜杠引用。不知道你为什么逃过这个空间和连字符。
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
答案 3 :(得分:3)
以下是awk
变体:
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
答案 4 :(得分:0)
由于sed -r
在OSX上不可用,因此以下内容在OSX上也适用:
sed 's/\(.*\) /\1-/' file_containing_your_text.txt