Le moyen le plus simple de remplacer les espaces blancs par (traits de soulignement) _ dans bash [fermé]

91

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?

flazzarini
la source
8
et la question est?
RageZ
2
Salut latz, Stackoverflow est un site de questions et réponses. Vous posez des questions et les autres y répondent, ou vous pouvez répondre aux questions des autres. Si vous souhaitez partager vos connaissances, vous pouvez poser une question, puis y répondre vous-même (après avoir laissé le temps aux autres de répondre également).
mouviciel
2
oups a pensé que j'ajouterais cette connaissance de cette façon afin qu'elle soit stockée ici. Quoi qu'il en soit, je le ferai comme tu l'
as

Réponses:

175

Vous pouvez le faire en utilisant uniquement le shell, pas besoin trnised

$ str="This is just a test"
$ echo ${str// /_}
This_is_just_a_test
ghostdog74
la source
5
Ou convertir tous les mots non-ASCII caractères à underscores: ${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.
canons
il peut y avoir des ponctuations légitimes également. On ne sait jamais.
ghostdog74
merci pour cette solution exactement ce que je cherchais. Merci beaucoup
flazzarini
17

C'est une programmation limite, mais regardez dans l'utilisation de tr :

$ echo "this is just a test" | tr -s ' ' | 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.

se détendre
la source