mai*_*ash 44 sed text-processing
如何使用空格仅替换字符串中最后一次出现的“-” sed
?
例如:
echo $MASTER_DISK_RELEASE
swp-RedHat-Linux-OS-5.5.0.0-03
Run Code Online (Sandbox Code Playgroud)
但我想得到以下输出(用空格替换最后一个连字符 [“-”])
swp-RedHat-Linux-OS-5.5.0.0 03
Run Code Online (Sandbox Code Playgroud)
jim*_*mij 60
你可以用 single 做到这一点sed
:
sed 's/\(.*\)-/\1 /'
Run Code Online (Sandbox Code Playgroud)
或者,使用扩展正则表达式:
sed -r 's/(.*)-/\1 /'
Run Code Online (Sandbox Code Playgroud)
关键是它sed
非常贪婪,所以尽可能多地匹配之前的字符-
,包括其他字符-
。
$ echo 'swp-RedHat-Linux-OS-5.5.0.0-03' | sed 's/\(.*\)-/\1 /'
swp-RedHat-Linux-OS-5.5.0.0 03
Run Code Online (Sandbox Code Playgroud)
Tho*_*hor 35
您还可以使用bash 参数扩展来处理此问题:
s=swp-RedHat-Linux-OS-5.5.0.0-03
echo ${s%-*} ${s##*-}
Run Code Online (Sandbox Code Playgroud)
输出:
swp-RedHat-Linux-OS-5.5.0.0 03
Run Code Online (Sandbox Code Playgroud)
rah*_*hul 16
像这样的东西对我有用,虽然我确信有更好的方法
echo "swp-RedHat-Linux-OS-5.5.0.0-03" | rev | sed 's/-/ /' | rev
swp-RedHat-Linux-OS-5.5.0.0 03
Run Code Online (Sandbox Code Playgroud)