web-dev-qa-db-fra.com

Le moyen le plus simple de remplacer les espaces blancs par (traits de soulignement) _ in bash

récemment, je devais écrire un petit script qui analysait les ordinateurs virtuels dans XenServer et, étant donné que les noms des ordinateurs virtuels étaient généralement composés d'espaces, par exemple dans Windows XP ou Windows Server 2008, je devais supprimer ces espaces). et les remplacer par des traits de soulignement _ J'ai trouvé une solution simple en utilisant sed, ce qui est un excellent outil pour la manipulation de chaînes.

echo "This is just a test" | sed -e 's/ /_/g'

résultats

This_is_just_a_test
83
flazzarini

Vous pouvez le faire en utilisant uniquement le shell, pas besoin de tr ou sed

$ str="This is just a test"
$ echo ${str// /_}
This_is_just_a_test
160
ghostdog74

C'est une programmation limite, mais envisagez d'utiliser tr :

$ echo "this is just a test" | tr -s ' ' | tr ' ' '_'

Devrait le faire. La première invocation réduit les espaces, la seconde est remplacée par un trait de soulignement. Vous devez probablement ajouter des tabulations et d’autres caractères d’espace, cela ne concerne que les espaces.

13
unwind