Bagaimana cara mengubah jeda baris dalam file teks antara format Windows dan Unix / Linux?

33

Bagaimana cara mengubah jeda baris dalam file teks antara format Windows dan Unix / Linux?

Saya memiliki lingkungan * nix, tetapi saya perlu mengimpor dan mengekspor data dengan jeda baris bergaya Windows. Saya pikir akan ada utilitas atau perintah standar untuk melakukan ini, tetapi sepertinya saya tidak dapat menemukannya.

alexeit
sumber

Jawaban:

42

Anda mungkin sedang mencari dos2unix, unix2dos, todosatau fromdostergantung pada distribusi Anda. Ubuntu / paket Debian todos/ fromdossebagai bagian dari paket tofrodos dari memori.

saschabeaumont
sumber
4
Dalam kasus orang datang di pertanyaan ini mencari solusi Windows, situs hulu untuk dos2unixadalah waterlan.home.xs4all.nl/dos2unix.html , dan bekerja pada Windows juga.
womble
Anda dapat menginstal dos2unix/unix2dos di Mac OS X menggunakan Homebrew . Dengan Homebrew diinstal, perintahnya adalah brew install dos2unix, yang menggunakan rumus ini .
Rory O'Kane
24

Salah satu opsi adalah menggunakan unix2dos(dan dos2unixuntuk kembali) di baris perintah.

Lain adalah dengan menggunakan editor teks:
Untuk vi:: set ff = dos untuk mengatur akhir baris menjadi akhiran baris dos.
Untuk emacs: Cx [ENTER] f dos [ENTER]

Untuk editor berbasis GUI favorit Anda (mis. Jedit) Saya sarankan memeriksa manual atau Google.

Terakhir jika Anda tidak ingin berurusan dengan editor teks dan lakukan saja menggunakan utilitas yang lebih umum dan semacamnya (atau jangan instal unix2dos):

tr -d '\r' < infile > outfileuntuk pergi dari Windows -> Unix
awk 'sub("$", "\r")' unixfile.txt > winfile.txtuntuk pergi dari Unix -> Windows karena trtidak dapat pergi dari Unix ke Windows.

Chealion
sumber
dos2unix membuat trik, namun terima kasih atas utilitas tr, ini bisa menghemat banyak waktu di masa lalu!
alexeit
Jika file memiliki akhir baris campuran, pastikan untuk memuatnya di tepat ff: :e ++ff=unix. Setidaknya masuk akal untuk dos -> unixkonversi.
x-yuri
Pelaut satu awk itu sedang mengajar manusia memancing, terima kasih untuk itu. Saya akan sedikit kurang lapar di masa depan
Gareth Davidson
13

Edit di Vim dan gunakan set fileformatperintah.

  • MS-DOS / Windows (CR + LF istirahat) ke * nix (LF hanya istirahat)

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

    :set fileformat=dos
    :wq
    
nedm
sumber
Berhati-hatilah saat menggunakannya jika file belum memiliki jeda baris di baris terakhir; vim akan menambahkan satu kecuali Anda tahu bagaimana mengatakannya.
CesarB
Setelah berjam-jam mencoba setiap solusi lain, ini adalah penyelamat yang saya butuhkan. Perilaku yang dikonfirmasi pada OS X Yosemite dengan hexdump -C- juga mengonfirmasi ini tidak lengket - sudah diatur per visesi
Techmag
8

Inilah yang saya gunakan, mirip dengan Chealion, untuk mengubah ujung Windows ke Unix:

tr -d \\015 < windows > unix
Josh
sumber
Poster ingin unix ke ujung garis windows. Dan Anda beberapa tahun terlambat dengan jawaban Anda.
ott--
5
Siapa yang peduli jika "terlambat tahun"? Itu masih berfungsi, dan itu masih berlaku untuk pertanyaan. Saya hanya menambahkan opsi lain untuk pembaca yang datang, seperti saya. Juga, pertanyaannya meminta Windows -> Unix, dan deskripsinya meminta Unix -> Windows.Shrug
Josh
Kanan. Mungkin Anda menambahkan tr-command lain untuk mengonversi unix ke windows.
ott--
Saya mencoba untuk membatalkan downvote, tetapi dikatakan terkunci sampai artikel diedit.
ott--
@ ott - tidak masalah, saya memilih untuk Anda. ... tunggu, sekarang saya tidak bisa memilih saya! ... dang ... :)
Alois Mahdal
1

Melakukan ini dengan POSIX itu rumit:

  • POSIX Sed tidak mendukung \ratau \15. Bahkan jika itu terjadi, opsi di tempat -ibukanlah POSIX

  • POSIX Awk mendukung \rdan \15, bagaimanapun, -i inplacepilihannya bukan POSIX

  • d2u dan dos2unix bukan utilitas POSIX , tetapi ex adalah

  • POSIX ex tidak mendukung \r, \15, \natau\12

Untuk menghapus pengembalian carriage:

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

Untuk menambahkan carriage return:

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