Answers:
您可以使用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
sed -r
。
sed -r 's/(.*)-(.*)-/\1 \2 /')
。
您还可以使用bash参数扩展来解决此问题:
s=swp-RedHat-Linux-OS-5.5.0.0-03
echo ${s%-*} ${s##*-}
输出:
swp-RedHat-Linux-OS-5.5.0.0 03
这样的事情对我有用,尽管我确信有更好的方法
echo "swp-RedHat-Linux-OS-5.5.0.0-03" | rev | sed 's/-/ /' | rev
swp-RedHat-Linux-OS-5.5.0.0 03
bash
参数扩展功能的欣赏,如果OP也使用它,则该功能很好用bash
。在可读性(到非常冗长的程度)和使用正确的工具之间将会达到微妙的平衡,但是通常会使用不正确的工具。
sed
不支持模式匹配。在这种情况下,您将需要其他东西,例如perl -pne 's/(.*)-/$1 /'
@Thor的参数扩展解决方案或其他东西。