2010-06-28 16 views
66

Tengo la siguiente información, y necesito ponerlo todo en una línea.¿Cómo elimino las nuevas líneas de un archivo de texto?

tengo esto:

22791 

; 

14336 

; 

22821 

; 

34653 

; 

21491 

; 

25522 

; 

33238 

; 

necesito esto:

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

EDITAR

Ninguno de estos comandos está funcionando perfectamente.

La mayoría de ellos vamos a los datos de la siguiente manera:

22791 

;14336 

;22821 

;34653 

;21491 

;25522 
+11

Copiar y pegar en la barra de direcciones del navegador o de otro campo de texto. Quick'n'dirty pero funciona para pequeñas cantidades de datos. – ignis

Respuesta

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

Editar:

Si ninguno de los comandos publicados aquí están trabajando, entonces usted tiene algo más que un salto de línea que separa sus campos. Posiblemente tiene finales de línea DOS/Windows en el archivo (aunque yo esperaría que las soluciones Perl funcionen incluso en ese caso)?

Probar:

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

Si eso no funciona, entonces vamos a tener que inspeccionar su archivo de más de cerca (por ejemplo, en un editor hexadecimal) para averiguar qué personajes son en realidad ahí que quiero eliminar

+0

¡Este último funciona! gracias ... ¡Estos datos vinieron de un archivo de registro de Apache! ... En realidad, no sé si se generó en Windows ... ¡el profesor de mi universidad me dio por hacer una tarea! – Alucard

+17

¡Espero que eliminar esas nuevas líneas no sea tu tarea real! –

+1

¡El segundo trabajo no funcionó! – techblu3

4
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 here tiene un montón de otros métodos para eliminar nuevas líneas.

editado para eliminar el abuso felino :)

+2

Correcto, pero el abuso felino. –

+0

Nunca escuché ese término antes. Gracias por señalarlo :) –

0
$ perl -0777 -pe 's/\n+//g' input >output
$ perl -0777 -pe 'tr/\n//d' input >output
6
paste -sd "" file.txt 
+1

En Solaris (10) 'paste -sd" "' no funciona en STDIN de manera predeterminada, por lo que si está conectado a él, use: '(algún comando) | pegar -sd "" -' – JohnGH

+0

Esto no funciona si también desea eliminar la * nueva línea * final. Solo elimina líneas nuevas intermedias. – josch

+0

hasta donde yo sé, usar 'paste -sd '\ 0'' es más portátil ... – Sundeep

0

lo haría con awk, por ejemplo,

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

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

EDITAR

olvidó de printf! Así también

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

o que mejor, lo que ya se da en los otros ans usando awk.

1

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

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

El '$(<file.txt)' lee el archivo y le da el contenido como una serie de palabras que 'eco' a continuación, se hace eco con un espacio entre ellos. El comando 'tr', entonces se borran todos los espacios:

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

Esto funciona siempre que la entrada no sea demasiado grande y siempre que use Bash (etiquetado para Bash, entonces está bien). Si estuviera escribiendo la respuesta ahora, sería 'tr -d '\ n'

1

Utilizar 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 
6
perl -p -i -e 's/\R//g;' filename 

tiene que hacer el trabajo.

1

xargs consume saltos de línea también (pero añade un salto de línea final final):

xargs < file.txt | tr -d ' ' 
3

uso

head -n 1 filename | od -c 

de averiguar cuál es el carácter ofensivo. luego usar

tr -d '\n' <filename 

de LF

tr -d '\r\n' <filename 

para CRLF

2

Puede editar el archivo en vim:

$ vim inputfile 
:%s/\n//g 
1

Suponiendo que sólo se desea mantener los dígitos y el punto y coma, los siguientes deberían hacer el truco asumiendo que no hay problemas importantes de codificación, aunque h que también eliminará el último "salto de línea":

$ tr -cd ";0-9" 

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

1

Dato curioso: use ASCII en su lugar.

tr -d '\012' < filename.extension 

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

0

lo general obtener este caso de uso cuando estoy copiar un fragmento de código de un archivo y quiero pegar en una consola sin añadir nuevas líneas innecesarias, que terminó haciendo un alias de fiesta
(lo llamé oneline si usted es curioso)

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 espacios recurrentes

  • xsel -b -i empuja esto a mi portapapeles

después de que me pegue el nuevo contenido del portapapeles en línea en una consola o lo que sea.

1

Usando el editor de texto gedit (3.18.3)

  1. Haga clic Buscar
  2. Haga clic Buscar y reemplazar ...
  3. Introduzca \n\s en Encuentra campo
  4. Dejar Reemplazar con en blanco (nada)
  5. Comprobar Expresión regular cuadro
  6. Haga clic en el Encuentra botón

Nota: esto no aborda exactamente original, viejo problema 7 años de la OP, pero debería ayudar a algunos usuarios novato Linux (como yo) que encuentran su camino desde la SE con preguntas similares sobre "¿Cómo obtengo mi texto todo en una línea?".

Cuestiones relacionadas