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?
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".
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
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 "$"