如何使用 sed 替换字符串中最后一次出现的字符?

如何使用 sed 替换字符串中最后一次出现的字符?

如何使用 仅将字符串中最后一次出现的“-”替换为空格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

相关内容