¿Cómo puedo poner una barra diagonal inversa antes de cada espacio, preferiblemente usando tr
o sed
comandos?
Aquí está mi guión:
#!/bin/bash
line="hello bye"
echo $line | tr ' ' "\\\ "
Se supone que esto reemplaza los espacios con una barra invertida seguida de un espacio, pero solo reemplaza los espacios con una barra invertida y no una barra invertida + espacio.
Este es el resultado que obtengo:
hello\bye
Rendimiento esperado:
hello\ bye
tr x ' '
, ¿dóndex
está el personaje que quieres reemplazar?Respuestas:
tr
No puedo hacer varios personajes. Utilice uno de estos en su lugar:sed
o
Perl
o
Perl también tiene una función ingeniosa llamada
quotemeta
que puede escapar de todas las cosas extrañas en una cadena:Lo anterior se imprimirá
También puedes usar
printf
y%q
:Entonces, podrías hacer
Tenga en cuenta que esto, como el de Perl,
quotemeta
escapará a todos los caracteres especiales, no solo a los espacios.Si tiene la línea en una variable, puede hacerlo directamente en bash:
fuente
printf
incorporada de Bash tiene una funcionalidad similar aquotemeta
-printf '%q\n' "$line"
debería hacerlo IIRC.Hay
AWK
que faltan en la lista de todas las posibles soluciones :)fuente