linux - una - ¿Cómo elimino las nuevas líneas de un archivo de texto?
sed linux eliminar linea (15)
Asumiendo que solo quiere mantener los dígitos y el punto y coma, lo siguiente debería ser el truco 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 retener puntos decimales, comas, etc.
Tengo la siguiente información, y necesito ponerlo todo 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 a la perfección.
La mayoría de ellos deja que los datos como este:
22791
;14336
;22821
;34653
;21491
;25522
Dato curioso: use ASCII en su lugar.
tr -d ''/012'' < filename.extension
(Causa editada porque no vi la maldita respuesta que tenía la misma solución, la única diferencia era que la mía tenía ASCII)
Lo haría con awk, por ejemplo
awk ''/[0-9]+/ { a = a $0 ";" } END { print a }'' file.txt
(Una desventaja es que a se "acumula" en la memoria).
EDITAR
Olvidé sobre printf! Así también
awk ''/[0-9]+/ { printf "%s;", $0 }'' file.txt
o probablemente sea mejor, lo que ya se dio en otros ans usando awk.
Normalmente obtengo este 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 bash
(Lo llamé en oneline
si tienes curiosidad)
xsel -b -o | tr -d ''/n'' | tr -s '' '' | xsel -b -i
xsel -b -o
lee mi portapapelestr -d ''/n''
elimina nuevas líneastr -s '' ''
elimina espacios recurrentesxsel -b -i
lo devuelve a mi portapapeles
después de eso, pegaría los nuevos contenidos del portapapeles en línea en una consola o lo que sea.
Puedes editar el archivo en vim:
$ vim inputfile
:%s//n//g
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 ''eco'' se repite con un espacio entre ellas. El comando ''tr'' luego elimina cualquier espacio:
22791;14336;22821;34653;21491;25522;33238;
Usando el editor de texto gedit (3.18.3)
- Haga clic en Buscar
- Haga clic en Buscar y reemplazar ...
- Ingrese
/n/s
en el campo Buscar - Deje Reemplazar con blanco (nada)
- Marque la casilla de expresión regular
- Haga clic en el botón Buscar
Nota: esto no aborda exactamente el problema original de OP de hace 7 años, pero debería ayudar a algunos usuarios novatos de Linux (como yo) que encuentran su camino desde la SE con preguntas similares sobre "¿Cómo obtengo mi texto todo en una línea?" .
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
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
xargs consume nuevas líneas también (pero agrega una nueva línea final):
xargs < file.txt | tr -d '' ''
$ perl -0777 -pe ''s//n+//g'' input >output
$ perl -0777 -pe ''tr//n//d'' input >output
paste -sd "" file.txt
perl -p -i -e ''s//R//g;'' filename
Debe hacer el trabajo.
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 muchos otros métodos para eliminar las nuevas líneas.
editado para eliminar el abuso felino :)
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 tiene finales de línea DOS / Windows en el archivo (aunque yo 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.