Digamos que tengo una variable de shell $stringque contiene texto con varias líneas nuevas, por ejemplo:
string="this
is 
a test"Me gustaría convertir esta cadena en una nueva cadena new_stringdonde todos los saltos de línea se convierten en espacios:
new_string="this is a test"Lo intenté:
print $string | sed 's/\n/ /g'pero no funcionó
También me pregunto si hay una manera de hacer esto usando   perl -0777 's/\n/ /g'o tal vez el comando tr.

Respuestas:
Si solo desea eliminar las nuevas líneas en la cadena, no necesita usarlas
sed. Puedes usar solocomo otros lo habían señalado.
Pero si desea convertir nuevas líneas en espacios en un archivo usando
sed, entonces puede usar:o incluso
awk:fuente
spongees una utilidad útil para sobrescribir un archivo de entrada. Es parte del paquetemoreutils... por ejemplo.awk '$1=$1' ORS=' ' file |sponge filemoreutils...Puedes intentar usar en su
trlugar:fuente
Otra opción sería usar
xargs(que, además, exprime múltiples espacios en blanco):fuente
Echo ignora los espacios en blanco, por lo que debería funcionar:
fuente
Si ya tiene la cadena como una variable de bash, como su ejemplo muestra, es inútil y un desperdicio de recursos (y más a escribir) para llamar
sed,awk,printf, etc ... Se puede utilizar sólo la expansión de variables fiesta :Ni siquiera tiene que reasignarlo. Puede usar la expansión tal cual y dejarla
$stringsin cambios.fuente
También puedes probar este comando awk,
Ejemplo:
fuente
Esto convierte cualquier secuencia de uno o más
\ncaracteres ewline que ocurran en la variable de shell$stringen una sola<space>.fuente
Puedes usar el simple comando sed
fuente