Come convertire le interruzioni di riga in un file di testo tra i formati Windows e Unix / Linux?


33

Come posso convertire le interruzioni di riga in un file di testo tra i formati Windows e Unix / Linux?

Ho un ambiente * nix, ma devo importare ed esportare dati con le interruzioni di riga in stile Windows. Ho pensato che ci sarebbe stata un'utilità o un comando standard per farlo, ma non riesco a trovarlo.

Risposte:


42

Probabilmente stai cercando dos2unix, unix2dos, todoso fromdosa seconda della distribuzione. Ubuntu / pacchetto Debian todos/ fromdoscome parte del pacchetto tofrodos dalla memoria.


4
Nel caso in cui qualcuno trovi questa domanda alla ricerca di soluzioni Windows, il sito upstream per dos2unixè waterlan.home.xs4all.nl/dos2unix.html e funziona anche in Windows.
Womble

Puoi installare dos2unix/unix2dos su Mac OS X usando Homebrew . Con Homebrew installato, il comando è brew install dos2unix, che utilizza questa formula .
Rory O'Kane,

24

Un'opzione è usare unix2dos(edos2unix per tornare indietro) sulla riga di comando.

Un altro è usare un editor di testo:
Per vi:: set ff = dos per impostare le terminazioni di riga come finali di riga Dos.
Per emacs: Cx [ENTER] f dos [ENTER]

Per il tuo editor preferito basato sulla GUI (es. Jedit) ti consiglio di controllare il manuale o Google.

Infine, se non vuoi avere a che fare con un editor di testo e farlo semplicemente usando utility più comuni e simili (o se non hai installato unix2dos):

tr -d '\r' < infile > outfileper passare da Windows -> Unix
awk 'sub("$", "\r")' unixfile.txt > winfile.txtper passare da Unix -> Windows in quanto trnon è possibile passare da Unix a Windows.


dos2unix ha fatto il trucco, tuttavia grazie per l'utilità tr, avrebbe potuto risparmiare così tanto tempo in passato!
alexeit

Se un file ha fine riga misti, assicuratevi di caricarlo in una corretta ff: :e ++ff=unix. Almeno ha senso per la dos -> unixconversione.
x-yuri,

Quell'incredibile liner insegna a un uomo a pescare, grazie per quello. Avrò un po 'meno fame in futuro
Gareth Davidson il

13

Modificalo in Vim e usa il set fileformatcomando.

  • MS-DOS / Windows (interruzioni CR + LF) a * nix (interruzioni solo LF)

    :set fileformat=unix
    :wq
    
  • * nix per MS-DOS / Windows

    :set fileformat=dos
    :wq
    

Fai attenzione quando lo usi se il file non ha già un'interruzione di riga nell'ultima riga; vim ne aggiungerà uno a meno che tu non sappia come dirlo di no.
CesarB,

Dopo ore di provare ogni altra soluzione, questo è stato il salvavita di cui avevo bisogno. Comportamento confermato su OS X Yosemite con hexdump -C- anche confermato che questo non è appiccicoso - è impostato per visessione
Techmag

8

Questo è quello che uso, simile a Chealion, per convertire le terminazioni di linea da Windows a Unix:

tr -d \\015 < windows > unix

Il poster voleva unix per terminare la linea di Windows. E sei in ritardo di qualche anno con la tua risposta.
ott--

5
A chi importa se è "anni di ritardo"? Funziona ancora ed è ancora applicabile alla domanda. Stavo solo aggiungendo un'altra opzione per i lettori che la incontrano, come me. Inoltre, la sua domanda richiede Windows -> Unix e la sua descrizione richiede Unix -> Windows. scrollata di spalle
Josh

Destra. Forse potresti aggiungere l'altro tr-command per convertire unix in Windows.
ott--

Ho provato a annullare il downvote, ma ha detto che è bloccato fino a quando l'articolo non viene modificato.
ott--

@ ott-- nessun problema, ho votato per te. ... aspetta, ora non posso votare per me! ... dang ... :)
Alois Mahdal,

1

Farlo con POSIX è complicato:

  • POSIX Sed non supporta \ro \15. Anche se così fosse, l'opzione sul posto -inon è POSIX

  • POSIX Awk supporta \re \15, tuttavia, l' -i inplaceopzione non è POSIX

  • D2U e dos2unix non sono POSIX utilità , ma ex è

  • POSIX ex non supporta \r, \15, \no\12

Per rimuovere i ritorni a capo:

awk 'BEGIN{RS="\1";ORS="";getline;gsub("\r","");print>ARGV[1]}' file

Per aggiungere resi di trasporto:

awk 'BEGIN{RS="\1";ORS="";getline;gsub("\n","\r&");print>ARGV[1]}' file
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.