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?


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

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.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.