¿Cómo puedo poner una barra diagonal inversa antes de cada espacio, preferiblemente usando tro sedcomandos?
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óndexestá el personaje que quieres reemplazar?Respuestas:
trNo puedo hacer varios personajes. Utilice uno de estos en su lugar:sedo
Perl
o
Perl también tiene una función ingeniosa llamada
quotemetaque puede escapar de todas las cosas extrañas en una cadena:Lo anterior se imprimirá
También puedes usar
printfy%q:Entonces, podrías hacer
Tenga en cuenta que esto, como el de Perl,
quotemetaescapará a todos los caracteres especiales, no solo a los espacios.Si tiene la línea en una variable, puede hacerlo directamente en bash:
fuente
printfincorporada de Bash tiene una funcionalidad similar aquotemeta-printf '%q\n' "$line"debería hacerlo IIRC.Hay
AWKque faltan en la lista de todas las posibles soluciones :)fuente