In der Shell gibt es immer mehrere Wege zum Ziel. Zeichen oder Substrings ersetzen kann man z.B. entweder mit sed oder der Bash selbst. Was zum Beispiel öfter mal benötigt wird, ist das Ersetzen von Leerzeichen in Variablen, damit sie als Teil eines Linuxpfades dienen können.
Leerzeichen ersetzen:
var="hallo welt und so weiter"; echo ${var// /_}
Mit sed sähe das dann so aus:
var="hallo welt und so weiter"; echo $var | sed -e 's/ /_/g'
Ergebnis bei beiden: hallo_welt_und_so_weiter
Nur hinten ersetzen:
Auch praktisch an der Bashmethode ist die Möglichkeit, die Ersetzung nur am Anfang (#) oder Ende (%) durchzuführen.
var="txtdatei-txt.txt"; echo ${var/%txt/html}
Mit sed geht das natürlich auch:
var="txtdatei-txt.txt"; echo $var | sed 's/txt$/html/'
Ergebnis bei beiden: txtdatei-txt.html
Voranstellen:
Man könnte auch etwas voranstellen.
var="einedatei.txt"; echo ${var/#/bak_}
Das selbe Beispiel mit sed:
var="einedatei.txt"; echo $var | sed 's/^/bak_/'
Erbebnis bei beiden: bak_einedatei.txt
Welche Methode die bessere ist, hängt vom Kontext ab. Keine Frage, sed ist bei weitem vielseitiger, aber für so einfache Dinge wie hier gezeigt, ist eine Subshell (wie sed sie öffnen würde) gar nicht nötig.
Ein Nachteil der Bashmethode: sie funktioniert nur mit Variablen, um etwas in einem beliebigen Text zu ersetzen, ist sed geeigneter.