it-swarm.com.de

Wie ersetze ich das letzte Vorkommen eines Zeichens in einer Zeichenfolge mit sed?

Wie ersetze ich nur das letzte Vorkommen von "-" in einer Zeichenfolge durch ein Leerzeichen mit sed?

Zum Beispiel:

echo $MASTER_DISK_RELEASE
swp-RedHat-Linux-OS-5.5.0.0-03

aber ich möchte die folgende Ausgabe erhalten (Ersetzen des letzten Bindestrichs [“-“] durch ein Leerzeichen)

swp-RedHat-Linux-OS-5.5.0.0 03
32
maihabunash

Sie können es mit einzelnen sed tun:

sed 's/\(.*\)-/\1 /'

oder mit erweitertem regulären Ausdruck:

sed -r 's/(.*)-/\1 /'

Der Punkt ist, dass sed sehr gierig ist, also so viele Zeichen vor - wie möglich, einschließlich anderer -.

$ echo 'swp-RedHat-Linux-OS-5.5.0.0-03' | sed 's/\(.*\)-/\1 /'
swp-RedHat-Linux-OS-5.5.0.0 03
49
jimmij

Sie können dies auch mit Bash-Parametererweiterung :

s=swp-RedHat-Linux-OS-5.5.0.0-03
echo ${s%-*} ${s##*-}

Ausgabe:

swp-RedHat-Linux-OS-5.5.0.0 03
28
Thor

So etwas hat bei mir funktioniert, obwohl ich mir sicher bin, dass es bessere Möglichkeiten gibt

echo "swp-RedHat-Linux-OS-5.5.0.0-03" | rev | sed 's/-/ /' | rev
swp-RedHat-Linux-OS-5.5.0.0 03
11
rahul