Digamos que tengo una variable de shell $string
que 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_string
donde 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
sponge
es una utilidad útil para sobrescribir un archivo de entrada. Es parte del paquetemoreutils
... por ejemplo.awk '$1=$1' ORS=' ' file |sponge file
moreutils
...Puedes intentar usar en su
tr
lugar: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
$string
sin cambios.fuente
También puedes probar este comando awk,
Ejemplo:
fuente
Esto convierte cualquier secuencia de uno o más
\n
caracteres ewline que ocurran en la variable de shell$string
en una sola<space>
.fuente
Puedes usar el simple comando sed
fuente