Come rimuovo i newline da un file di testo?

Ho i seguenti dati e ho bisogno di mettere tutto in una riga.

Ho questo:

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

Ho bisogno di questo:

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

MODIFICARE

Nessuno di questi comandi funziona perfettamente.

La maggior parte di loro ha lasciato i dati in questo modo:

 22791 ;14336 ;22821 ;34653 ;21491 ;25522 

 tr -d '\n' < yourfile.txt 

Modificare:

Se nessuno dei comandi pubblicati qui funziona, allora hai qualcosa di diverso da una nuova riga che separa i tuoi campi. Probabilmente hai terminazioni di riga DOS / Windows nel file (anche se mi aspetterei che le soluzioni Perl funzionino anche in quel caso)?

Provare:

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

Se ciò non funziona, dovrai ispezionare il tuo file più da vicino (ad es. In un editor esadecimale) per scoprire quali caratteri sono effettivamente presenti e che vuoi rimuovere.

 perl -p -i -e 's/\R//g;' filename 

Deve fare il lavoro.

 paste -sd "" file.txt 
 tr -d '\n' < file.txt 

O

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

O

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

Questa pagina qui ha un sacco di altri metodi per rimuovere i newline.

modificato per rimuovere l'abuso felino 🙂

uso

 head -n 1 filename | od -c 

per capire che cosa è il personaggio incriminato. quindi utilizzare

 tr -d '\n'  

per LF

 tr -d '\r\n'  

per CRLF

Puoi modificare il file in vim:

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

Fatto nerd: usa invece ASCII.

 tr -d '\012' < filename.extension 

(La causa modificata non ho visto la risposta orribile che aveva la stessa soluzione, l'unica differenza era che la mia aveva ASCII)

Se i dati sono in file.txt, allora:

 echo $( 

" $( " legge il file e fornisce il contenuto come una serie di parole che "echo" echeggia con uno spazio tra di esse. Il comando 'tr' cancella quindi gli spazi:

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

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 

xargs consuma anche le nuove righe (ma aggiunge una nuova riga finale finale):

 xargs < file.txt | tr -d ' ' 

Supponendo di voler mantenere solo le cifre e il punto e virgola, il seguente dovrebbe fare il trucco presumendo che non ci siano problemi di codifica importanti, sebbene rimuoverà anche l’ultima “newline”:

 $ tr -cd ";0-9" 

È ansible modificare facilmente quanto sopra per includere altri caratteri, ad es. Se si desidera conservare punti decimali, virgole, ecc.

Utilizzo dell’editor di testo gedit (3.18.3)

  1. Fai clic su Cerca
  2. Fai clic su Trova e sostituisci …
  3. Inserisci \n\s nel campo Trova
  4. Lasciare Sostituisci con vuoto (niente)
  5. Seleziona la casella dell’espressione regolare
  6. Fai clic sul pulsante Trova

Nota: questo non risolve esattamente il problema originale di 7 anni dell’OP, ma dovrebbe aiutare alcuni utenti Linux di noob (come me) che trovano la loro strada qui dagli SE con domande simili “Come faccio a ottenere il mio tutto su una riga” .

  $ perl -0777 -pe 's / \ n + // g' input> output 
  $ perl -0777 -pe 'tr / \ n // d' input> output 

Lo farei con awk, ad es

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

(uno svantaggio è che a viene “accumulato” in memoria).

MODIFICARE

Hai dimenticato la stampa! Quindi anche

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

o probabilmente meglio, ciò che è stato già dato negli altri ans usando awk.

Di solito ricevo questo file quando copio uno snippet di codice da un file e voglio incollarlo in una console senza aggiungere nuove righe inutili, ho finito per fare un alias bash
(l’ho chiamato on oneline se sei curioso)

 xsel -b -o | tr -d '\n' | tr -s ' ' | xsel -b -i 
  • xsel -b -o legge i miei appunti

  • tr -d '\n' rimuove le nuove linee

  • tr -s ' ' rimuove gli spazi ricorrenti

  • xsel -b -i riporta ai miei appunti

dopo di ciò incollerei i nuovi contenuti degli appunti in linea su una console o altro.

Ti manca la risposta più ovvia e veloce, soprattutto quando hai bisogno di farlo nella GUI per sistemare alcune strane parole.

  • Apri gedit

  • Quindi premere Ctrl + H , quindi inserire la casella di testo Find \n e in Replace with uno spazio vuoto quindi riempire la casella di controllo Regular expression e voilà.