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的参数扩展解决方案或其他东西。