1408 Stimmen

Ersetzen Sie in einem Shell-Skript eine Teilzeichenfolge durch eine andere Zeichenfolge.

Ich habe "Ich liebe Suzi und Marry" und möchte "Suzi" in "Sara" ändern.

firstString="Ich liebe Suzi und Marry"
secondString="Sara"

Gewünschtes Ergebnis:

firstString="Ich liebe Sara und Marry"

40voto

echo [string] | sed "s|[original]|[target]|g"
  • "s" bedeutet "ersetzen"
  • "g" bedeutet "global, alle übereinstimmenden Vorkommen"

33voto

vhs Punkte 7667

Wenn du morgen entscheidest, dass du auch Marry nicht liebst, kann sie ebenfalls ersetzt werden:

today=$( /tmp/lovers.txt

Es muss 50 Arten geben, deinen Liebhaber zu verlassen.

21voto

Nate Revo Punkte 301

Da ich keinen Kommentar hinzufügen kann. @ruaka Um das Beispiel besser lesbar zu machen, schreiben Sie es bitte so

full_string="Ich liebe Suzy und Mary"
search_string="Suzy"
replace_string="Sara"
my_string=${full_string/$search_string/$replace_string}
oder
my_string=${full_string/Suzy/Sarah}

14voto

Payam Punkte 1010

Verwenden AWK:

firstString="Ich liebe Suzi und Marry"
echo "$firstString" | awk '{gsub("Suzi","Sara"); print}'

13voto

agc Punkte 7474

Reiner POSIX Shell-Methode, die im Gegensatz zu Roman Kazanovskyi's sed-basierte Antwort keine externen Tools benötigt, sondern nur die eigenen nativen Parametererweiterungen der Shell. Beachten Sie, dass lange Dateinamen minimiert werden, damit der Code besser auf einer Linie passt:

f="Ich liebe Suzi und Marry"
s=Sara
t=Suzi
[ "${f%$t*}" != "$f" ] && f="${f%$t*}$s${f#*$t}"
echo "$f"

Ausgabe:

Ich liebe Sara und Marry

So funktioniert es:

  • Entfernen des kleinsten Suffixmusters. "${f%$t*}" gibt "Ich liebe" zurück, wenn das Suffix $t "Suzi*" in $f "Ich liebe Suzi and Marry" ist.

  • Aber wenn t=Zelda ist, löscht "${f%$t*}" nichts und gibt den gesamten String "Ich liebe Suzi und Marry" zurück.

  • Dies wird verwendet, um zu testen, ob $t in $f ist mit [ "${f%$t*}" != "$f" ], das zu wahr evaluiert, wenn der String $f "Suzi*" enthält und zu falsch wenn nicht.

  • Wenn der Test wahr ergibt, konstruieren Sie den gewünschten String mit Entfernen des kleinsten Suffixmusters ${f%$t*} "Ich liebe" und Entfernen des kleinsten Präfixmusters ${f#*$t} "and Marry", mit dem 2. String $s "Sara" dazwischen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X