La forma más sencilla de reemplazar los espacios en blanco con (guiones bajos) _ en bash [cerrado]

92

Recientemente tuve que escribir un pequeño script que analizaba las VM en XenServer y como los nombres de las VM son en su mayoría con espacios en blanco en, por ejemplo, Windows XP o Windows Server 2008, tuve que recortar esos espacios en blanco y reemplazarlos con guiones bajos _. Encontré una solución simple para hacer esto usando sed, que es una gran herramienta cuando se trata de manipulación de cadenas.

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

devoluciones

This_is_just_a_test

¿Hay otras formas de lograr esto?

flazzarini
fuente
8
y la pregunta es?
RageZ
2
Hola latz, Stackoverflow es un sitio de preguntas y respuestas. Usted hace preguntas y otros las responden, o puede responder preguntas de otros. Si desea compartir su conocimiento, puede hacer una pregunta y luego responderla usted mismo (después de dejar un tiempo para que otros también respondan).
mouviciel
2
oups pensó que agregaría este conocimiento de esa manera para que se almacene aquí. De todos modos lo haré como dijiste la próxima vez, respondiendo mi propia pregunta :)
flazzarini

Respuestas:

175

Puede hacerlo usando solo el caparazón, sin necesidad de trosed

$ str="This is just a test"
$ echo ${str// /_}
This_is_just_a_test
ghostdog74
fuente
5
O convertir todos los caracteres de texto no ASCII en guiones: ${str//[^a-zA-Z0-9]/_}; de cualquier manera, si no se apega al shell POSIX puro, utilice las funciones disponibles.
armas
también puede haber puntuaciones que sean legítimas. nunca sabemos.
ghostdog74
gracias por esta solución exactamente lo que estaba buscando. Muchas gracias
flazzarini
18

Esta es una programación límite, pero considere usar tr :

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

Deberías hacerlo. La primera invocación reduce los espacios, la segunda se reemplaza con un guión bajo. Probablemente necesite agregar TAB y otros caracteres de espacio en blanco, esto es solo para espacios.

relajarse
fuente