¿Cómo elimino nuevas líneas de un archivo de texto?

116

Tengo los siguientes datos y necesito ponerlos todos en una línea.

Tengo esto:

22791

;

14336

;

22821

;

34653

;

21491

;

25522

;

33238

;

Necesito este:

22791;14336;22821;34653;21491;25522;33238;

EDITAR

Ninguno de estos comandos funciona perfectamente.

La mayoría de ellos deja que los datos se vean así:

22791

;14336

;22821

;34653

;21491

;25522
Alucard
fuente
15
Copie y pegue en la barra de direcciones del navegador o en otro campo de texto. Quick'n'dirty pero funciona para pequeñas cantidades de datos.
ignis

Respuestas:

245
tr -d '\n' < yourfile.txt

Editar:

Si ninguno de los comandos publicados aquí funciona, entonces tiene algo más que una nueva línea que separa sus campos. Posiblemente tenga terminaciones de línea DOS / Windows en el archivo (aunque esperaría que las soluciones Perl funcionen incluso en ese caso).

Tratar:

tr -d "\n\r" < yourfile.txt

Si eso no funciona, entonces tendrá que inspeccionar su archivo más de cerca (por ejemplo, en un editor hexadecimal) para averiguar qué caracteres hay realmente allí que desea eliminar.

Tyler McHenry
fuente
7
¿Cómo se escribe esta salida en el mismo archivo o en otro?
Goldname
3
Creo que trno es adecuado para líneas vacías. ¿Qué piensas? - - Creo que sedes la mejor opción como se describe aquí stackoverflow.com/q/16414410/54964
Léo Léopold Hertz 준영
Para enrutar la salida a otro archivo, simplemente use la redirección de salida. Para enrutarlo al mismo archivo, canalícelo a "sponge" (disponible en el paquete "moreutils" en los sistemas base Debian).
Plugwash
Para escribir la salida en el mismo archivo, use un subshellecho -n $(tr -d "\n" < yourfile.txt) > yourfile.txt
pei
11
perl -p -i -e 's/\R//g;' filename

Debe hacer el trabajo.

ZyX
fuente
Golf aperl -pie 's/\R//g' filename
Trenton
9
paste -sd "" file.txt
Amardeep AC9MF
fuente
1
En Solaris (10) paste -sd ""no funciona en STDIN de forma predeterminada, por lo que si lo está utilizando, use: (some command) | paste -sd "" -
JohnGH
Esto no funciona si también desea eliminar la nueva línea final . Solo elimina las nuevas líneas intermedias.
Josch
Esto no funcionó en Mac OS, la versión de Sundeep sí. paste -sd'\0' -
Trenton
7
tr -d '\n' < file.txt

O

awk '{ printf "%s", $0 }' file.txt

O

sed ':a;N;$!ba;s/\n//g' file.txt

Esta página aquí tiene un montón de otros métodos para eliminar nuevas líneas.

editado para eliminar el abuso felino :)

Vivin Paliath
fuente
4

utilizar

head -n 1 filename | od -c 

para averiguar CUÁL es el personaje ofensivo. luego usa

tr -d '\n' <filename

para LF

tr -d '\r\n' <filename

para CRLF

MrE
fuente
4

Puede editar el archivo en vim:

$ vim inputfile
:%s/\n//g
loganaayahee
fuente
2
y reemplazar con espacios::%s/\n/ /g
Remi Mélisson
2

Usando man 1 ed:

# cf. http://wiki.bash-hackers.org/doku.php?id=howto:edit-ed 
ed -s file <<< $'1,$j\n,p'  # print to stdout 
ed -s file <<< $'1,$j\nwq'  # in-place edit
carlmund
fuente
2

Dato curioso: usa ASCII en su lugar.

tr -d '\012' < filename.extension   

(Editado porque no vi la maldita respuesta que tenía la misma solución, la única diferencia era que la mía tenía ASCII)

Byfjunarn
fuente
2

Usa sed con clases POSIX

Esto eliminará todas las líneas que contengan solo espacios en blanco (espacios y tabulaciones)

sed '/^[[:space:]]*$/d'

Simplemente tome lo que sea con lo que esté trabajando y canalícelo a eso

Ejemplo

cat filename | sed '/^[[:space:]]*$/d'

Jasonleonhard
fuente
sed -i '/ ^ [[: espacio:]] * $ / d' nombre de archivo ... para edición en el lugar; la respuesta como la anterior aparecerá en la pantalla
BradChesney79
1
$ perl -0777 -pe 's / \ n + // g' entrada> salida
$ perl -0777 -pe 'tr / \ n // d' entrada> salida
Greg Bacon
fuente
1

Si los datos están en file.txt, entonces:

echo $(<file.txt) | tr -d ' '

El " $(<file.txt)" lee el archivo y da el contenido como una serie de palabras que "hacen eco" luego hacen eco con un espacio entre ellas. El comando 'tr' borra todos los espacios:

22791;14336;22821;34653;21491;25522;33238;
Jonathan Leffler
fuente
Esto funciona siempre que la entrada no sea demasiado grande y mientras esté usando Bash (etiquetado para Bash, así que está bien). Si estuviera escribiendo la respuesta ahora, sería tr -d '\n' < file.txt, que es lo que hace la respuesta aceptada (y me sorprende no haberla escrito en ese momento). Esto probablemente fue escrito para mostrar 'otra forma más de hacerlo'.
Jonathan Leffler
1

xargs también consume líneas nuevas (pero agrega una línea nueva final):

xargs < file.txt | tr -d ' '
Marky
fuente
1

Suponiendo que solo desea mantener los dígitos y el punto y coma, lo siguiente debería funcionar asumiendo que no hay problemas importantes de codificación, aunque también eliminará la última "nueva línea":

$ tr -cd ";0-9"

Puede modificar fácilmente lo anterior para incluir otros caracteres, por ejemplo, si desea conservar puntos decimales, comas, etc.

pico
fuente
1

Usando el editor de texto gedit (3.18.3)

  1. Haga clic en Buscar
  2. Haga clic en Buscar y reemplazar ...
  3. Entrar \n\sen el campo Buscar
  4. Dejar Reemplazar con blanco (nada)
  5. Marque la casilla de expresión regular
  6. Haga clic en el botón Buscar

Nota: esto no aborda exactamente el problema original de 7 años del OP, pero debería ayudar a algunos usuarios novatos de Linux (como yo) que encuentran su camino aquí desde los SE con preguntas similares de "cómo consigo mi texto todo en una línea" .

Hastig Zusammenstellen
fuente
1

Estaba teniendo el mismo caso hoy, súper fácil en vim o nvim, puede usar gJpara unir líneas. Para su caso de uso, simplemente haga

99gJ

esto unirá todas sus 99 líneas. Puede ajustar el número 99según sea necesario según la cantidad de líneas que desee unir. Si solo se une a 1 línea, entonces solo gJes suficiente.

LeOn - Han Li
fuente
0

Lo haría con awk, p. Ej.

awk '/[0-9]+/ { a = a $0 ";" } END { print a }' file.txt

(una desventaja es que a se "acumula" en la memoria).

EDITAR

¡Olvidé printf! Así también

awk '/[0-9]+/ { printf "%s;", $0 }' file.txt

o probablemente mejor, lo que ya se le dio en los otros ans usando awk.

ShinTakezou
fuente
0

Por lo general, obtengo este caso de uso cuando estoy copiando un fragmento de código de un archivo y quiero pegarlo en una consola sin agregar nuevas líneas innecesarias, terminé haciendo un alias de bash
(lo llamé onelinesi tiene curiosidad)

xsel -b -o | tr -d '\n' | tr -s ' ' | xsel -b -i
  • xsel -b -o lee mi portapapeles

  • tr -d '\n' elimina nuevas líneas

  • tr -s ' ' elimina los espacios recurrentes

  • xsel -b -i empuja esto de vuelta a mi portapapeles

después de eso, pegaría el nuevo contenido del portapapeles en línea en una consola o lo que sea.

Mohammad AbuShady
fuente
0

Se está perdiendo la respuesta más obvia y rápida, especialmente cuando necesita hacer esto en la GUI para corregir un ajuste de palabras extraño.

  • Abierto gedit

  • Luego Ctrl+ H, luego coloque en el Findcuadro de texto \ny en Replace withun espacio vacío, luego complete la casilla de verificación Regular expressiony listo.

Eduard Florinescu
fuente
0

Para eliminar también la nueva línea final al final del archivo

python -c "s=open('filename','r').read();open('filename', 'w').write(s.replace('\n',''))"
crizCraig
fuente