Récemment, j'ai dû écrire un petit script qui analysait les machines virtuelles dans XenServer et comme les noms des machines virtuelles sont principalement avec des espaces blancs dans, par exemple, Windows XP ou Windows Server 2008, j'ai dû couper ces espaces blancs et les remplacer par des traits de soulignement _. J'ai trouvé une solution simple pour faire cela en utilisant sed, qui est un excellent outil pour la manipulation de chaînes.
echo "This is just a test" | sed -e 's/ /_/g'
Retour
This_is_just_a_test
Y a-t-il d'autres façons d'accomplir cela?
Réponses:
Vous pouvez le faire en utilisant uniquement le shell, pas besoin
tr
nised
la source
${str//[^a-zA-Z0-9]/_}
; de toute façon, si vous ne vous en tenez pas au shell POSIX pur, utilisez les fonctionnalités disponibles.C'est une programmation limite, mais regardez dans l'utilisation de tr :
Devrait le faire. Le premier appel réduit les espaces, le second les remplace par un trait de soulignement. Vous devrez probablement ajouter des tabulations et d'autres caractères d'espacement, ceci est uniquement pour les espaces.
la source