it-swarm.com.de

Dollarzeichen durch sed ersetzen

Ich versuche, alle Dollarzeichen in einer Zeichenkette durch sed zu ersetzen. Es wird jedoch nicht nur das Dollarzeichen ersetzt, sondern die gesamte folgende Zeichenfolge.

$ echo "abc $def ghi" | sed 's/$//g'
$ abc ghi

Wenn mindestens eine Zahl auf das Dollarzeichen folgt, wird nur der Teil vor der ersten Nichtnummer ersetzt:

$ echo "abc $123def ghi" | sed 's/$//g'
$ abc def ghi

Was ist los?

7
Severin
echo 'abc $def ghi' | sed 's/\$//g'

Im Echo Use-Anführungszeichen bedeutet dies, dass es die Variable def und ihre Ersetzung gibt und wenn Sie die Variable def nicht haben, ist sie leer. In sed müssen Sie dem Dollarzeichen entkommen, da es sonst "Ankerpunkt am Ende der Linie" bedeutet.

12
tso

Wenn Sie nur das Zeichen '$' aus der Zeichenfolge entfernen möchten, gibt es eine alternative Möglichkeit, Shell-Parametererweiterung zu verwenden. Zum Beispiel:

v1='abc $def ghi'
v2='abc $123def ghi'
echo ${v1/$/}
echo ${v2/$/}

Die Syntax lautet: $ {parameter/pattern/string}

Wenn Sie mehr über die Shell-Parametererweiterung erfahren möchten, schauen Sie unter: https://www.gnu.org/software/bash/manual/html_node/Shell-Parameter-Expansion.html#Shell-Parameter-Expansion

1
Siqueira

tr sollte für diese Aufgabe verwendet werden, nicht sed.

Verwenden Sie es mit einfachen Anführungszeichen in echo, um die Parametererweiterung zu verhindern.

echo 'abc $123def ghi' | tr -d "$"

0