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.