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"

9voto

Muster, um das erste Auftreten mit speziellen Zeichen zu ersetzen:

${parameter/muster/zeichenfolge}

Muster, um alle Vorkommen mit speziellen Zeichen zu ersetzen:

${parameter//muster/zeichenfolge}

ersteZeichenkette="Ich liebe //Suzi// und Marry"
zweiteZeichenkette="Sara"
ersteZeichenkette="${ersteZeichenkette/\/\/Suzi\/\//"$zweiteZeichenkette"}"
echo $ersteZeichenkette

Es wird drucken: Ich liebe Sara und Marry

9voto

Tomer Gal Punkte 739

Ich denke, das ist die sauberste Form für Ihren Anwendungsfall:

firstString="${firstString//Suzi/$secondString}"

0voto

Versuche dies:

ls *.ext | awk '{print "mv "$1" "$1".newext"}' | sed "s/.ext.newext/.newext/" | parallel {}

0voto

Fedor Punkte 11

Auf der oben vorgeschlagenen awk-Lösung basierend, würde ich sie erweitern, um awk-Variablen zu verwenden. Dies ermöglicht das Übergeben von Text mit Sonderzeichen..

aString="Ich liebe _p1_ sehr!"
aVar="komplizierte \" Text \' mit \. speziellen ) Zeichen"
awk -v p1="$aVar" '{gsub("_p1_",p1); print}' <<< $aString

ergibt:

Ich liebe komplizierte " Text ' mit . speziellen ) Zeichen sehr

es wäre schwierig, diesen Fall mit sed -e oder bash-Substitutionen zu implementieren.

-1voto

CodeKiller Punkte 67

Der einzige Weg, den ich gefunden habe, ist den String in einer Datei zu speichern, sed zu verwenden und dann den Dateiinhalt in einer Variable zu speichern:

echo "Ich liebe Suzy" > tmp.txt
sed -i "s/Suzy/Sarah/" tmp.txt
set res=`cat tmp.txt`
echo $res
rm tmp.txt

Ich weiß nicht, welche Art von Shell ich verwende (die einzige Sache, die ich gefunden habe, ist sh-4.2, wenn ich 'sh' eingebe), aber alle klassischen Syntaxe scheitern, wie das einfache test=${test2}. Es scheitert 2 Mal: bei der Zuweisung (muss set verwenden) und bei dem ${}.

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