web-dev-qa-db-fra.com

Remplacer le signe dollar par sed

J'essaie de remplacer tous les signes dollar dans une chaîne en utilisant sed. Cependant, non seulement le signe dollar est remplacé mais toute la chaîne qui suit.

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

Si au moins un numéro suit le signe dollar, seule la partie précédant le remplacement du premier non-numéro:

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

Que se passe-t-il?

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

Dans echo, utilisez guillemet simple, sinon, cela signifie qu'il existe une variable def et sa substitution. Si vous n'avez pas de variable def, elle est vide. Dans sed, vous devez échapper au signe dollar, car sinon, cela signifie "ancrer le bout de la ligne".

12
tso

Si vous souhaitez uniquement supprimer le caractère '$' de la chaîne, une autre solution consiste à utiliser Shell Parameter Expansion. Par exemple:

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

La syntaxe est la suivante: $ {paramètre/modèle/chaîne}

Si vous voulez en savoir plus sur Shell Parameters Expansion, consultez: https://www.gnu.org/software/bash/manual/html_node/Shell-Parameter-Expansion.html#Shell-Parameter-Expansion

1
Siqueira

tr doit être utilisé pour cette tâche, pas sed.

Utilisez-le avec des guillemets simples dans echo pour empêcher l'expansion des paramètres.

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

0
Andre Figueiredo