Comment remplacer uniquement la dernière occurrence de "-" dans une chaîne par un espace utilisant sed
?
Par exemple:
echo $MASTER_DISK_RELEASE
swp-RedHat-Linux-OS-5.5.0.0-03
mais je veux obtenir la sortie suivante (en remplaçant le dernier tiret [“-“] par un espace)
swp-RedHat-Linux-OS-5.5.0.0 03
Vous pouvez le faire avec un seul sed
:
sed 's/\(.*\)-/\1 /'
ou, en utilisant une expression régulière étendue:
sed -r 's/(.*)-/\1 /'
Le fait est que sed
est très gourmand, donc correspond à autant de caractères avant -
autant que possible, y compris d'autres -
.
$ echo 'swp-RedHat-Linux-OS-5.5.0.0-03' | sed 's/\(.*\)-/\1 /'
swp-RedHat-Linux-OS-5.5.0.0 03
Vous pouvez également gérer cela avec expansion des paramètres bash :
s=swp-RedHat-Linux-OS-5.5.0.0-03
echo ${s%-*} ${s##*-}
Production:
swp-RedHat-Linux-OS-5.5.0.0 03
Quelque chose comme ça a fonctionné pour moi, même si je suis sûr qu'il existe de meilleures façons
echo "swp-RedHat-Linux-OS-5.5.0.0-03" | rev | sed 's/-/ /' | rev
swp-RedHat-Linux-OS-5.5.0.0 03