如何使用 仅将字符串中最后一次出现的“-”替换为空格sed
?
例如:
echo $MASTER_DISK_RELEASE
swp-RedHat-Linux-OS-5.5.0.0-03
但我想得到以下输出(用空格替换最后一个连字符 [“-”])
swp-RedHat-Linux-OS-5.5.0.0 03
答案1
您可以使用 single 来完成sed
:
sed 's/\(.*\)-/\1 /'
或者,使用扩展正则表达式:
sed -r 's/(.*)-/\1 /'
重点是它sed
非常贪婪,因此会匹配-
尽可能多的之前的字符,包括其他字符-
。
$ echo 'swp-RedHat-Linux-OS-5.5.0.0-03' | sed 's/\(.*\)-/\1 /'
swp-RedHat-Linux-OS-5.5.0.0 03
答案2
你也可以用以下方法处理这个问题bash参数扩展:
s=swp-RedHat-Linux-OS-5.5.0.0-03
echo ${s%-*} ${s##*-}
输出:
swp-RedHat-Linux-OS-5.5.0.0 03
答案3
像这样的东西对我有用,尽管我确信有更好的方法
echo "swp-RedHat-Linux-OS-5.5.0.0-03" | rev | sed 's/-/ /' | rev
swp-RedHat-Linux-OS-5.5.0.0 03