Las formas más rápidas y fáciles que conozco para resolver este problema:
Cuando queremos reemplazar el nuevo carácter de línea \n
con el espacio :
xargs < file
xargs
tiene sus propios límites en la cantidad de caracteres por línea y la cantidad de todos los caracteres combinados, pero podemos aumentarlos. Los detalles se pueden encontrar ejecutando este comando: xargs --show-limits
y, por supuesto, en el manual:man xargs
Cuando queremos reemplazar un personaje con otro exactamente un personaje :
tr '\n' ' ' < file
Cuando queremos reemplazar un personaje con muchos personajes :
tr '\n' '~' < file | sed s/~/many_characters/g
Primero, reemplazamos los caracteres de nueva línea \n
por tildes ~
(o elegimos otro carácter único que no esté presente en el texto), y luego reemplazamos los caracteres de tilde con cualquier otro carácter ( many_characters
) y lo hacemos para cada tilde (bandera g
).
sed
script entre comillas simples para que Bash no se meta con él (ya quesed s/\n/ /g
llamased
con dos argumentos, a saber,s/n/
y/g
); (2) ya que desea que la salida decat file | grep pattern
ser la entrada ased
, no los argumentos ased
, es necesario eliminarxargs
; y (3) no es necesariocat
aquí, ya quegrep
puede tomar un nombre de archivo como segundo argumento. Entonces, deberías haberlo intentadogrep pattern file | sed 's/\n/ /g'
. (En este caso no habría funcionado, por las razones dadas en el enlace de arriba, pero ahora ya sabes para el futuro.)