Jika Anda melakukan hexdump -C badfiledan melihat 0x0d 0x0a"\r\n"itu adalah masalah Anda.
Yzmir Ramirez
Jawaban:
1075
dos2unix adalah utilitas commandline yang akan melakukan ini, atau :%s/^M//gakan jika Anda menggunakan Ctrl- vCtrl- muntuk memasukkan ^ M, atau Anda bisa :set ff=unixdan vim akan melakukannya untuk Anda.
Sebagai alternatif, jika Anda sering memindahkan file, Anda mungkin tidak ingin mengonversinya, tetapi melakukannya :set ff=dos, jadi vim akan tahu itu adalah file DOS dan menggunakan konvensi DOS untuk akhir baris.
Terima kasih banyak. Saya mencoba vi + ': wq ++ ff = unix' <filepath> untuk yang malas seperti saya.
a_secenthusiast
2
Ini harus menjadi jawaban yang paling banyak dipilih. :w +ff=unixjauh lebih bagus daripada kebanyakan hal lain yang ditulis di sini, dan skrip bash adalah bonus yang bagus.
mkasberg
The :eperintah tidak muncul untuk melakukan apa-apa pada saya Windows vim menginstal. Pandangan saya masih menunjukkan ^Mkode.
Grant Birchmeier
160
Saya biasanya menggunakan
:%s/\r/\r/g
yang tampaknya sedikit aneh, tetapi bekerja karena cara yang sesuai dengan linefeeds vim. Saya juga merasa lebih mudah diingat :)
Ini bekerja secara konsisten di seluruh platform. Jawaban terbaik di sini.
thebigjc
4
Saya tidak pernah memiliki masalah dengan :set ff=unixsebelumnya, tetapi file yang saya buka hari ini pasti sangat aneh. Vim mengatakan itu sudah fileformat=unixtetapi semua akhir baris sudah ^M. Solusi ini berhasil untuk saya.
Chris B
15
Solusi ini menambahkan baris ekstra yang tidak diinginkan untuk saya, menggandakan jumlah baris dalam file. :%s/\r//galih-alih bekerja untuk saya.
Victor Zamanian
3
Victor, file Anda kemungkinan memiliki akhiran. \ r tidak dibaca sebagai baris baru tetapi \ n adalah. Dalam file yang saya jalankan adalah dan Anda harus menambahkan karakter baris baru.
Joeyjoejoejr
2
@ VictorZamanian's :%s/\r//gadalah satu - satunya solusi tujuan umum - terutama untuk file mode campuran yang berisi campuran heterogen dari baris baru gaya DOS dan UNIX. Solusi kanonik (mis. :set ff=unix, :e ++ff=unix) Mengasumsikan setiap baris buffer saat ini berakhir dengan gaya baris baru yang sama. Terkadang mereka melakukannya; terkadang tidak. Isyarat wajah sedih.
Cecil Curry
97
Saya lebih suka menggunakan perintah berikut:
:set fileformat=unix
Anda juga dapat menggunakan macataudos untuk mengonversi file Anda masing-masing ke macintosh atau konvensi file MS-DOS / MS-Windows. Dan tidak ada artinya jika file sudah dalam format yang benar.
Langkah-langkah berikut dapat mengonversi format file untuk dos menjadi unix:
:e ++ff=dos Edit file again, using dos file format ('fileformats' is ignored).[A 1]
:setlocal ff=unix This buffer will use LF-only line endings when written.[A 2]
:w Write buffer using unix (LF-only) line endings.
Komentar tentang membuat ^ M muncul adalah apa yang berhasil bagi saya. Hanya mengetik "^ M" di vi saya tidak mendapatkan apa-apa (tidak ditemukan). Urutan CTRL+ VCTRL+ Mmelakukannya dengan sempurna.
Anda bisa menggunakan :%sbukan :1,$s. %adalah singkatan 1,$.
the Tin Man
5
Saya menemukan cara yang sangat mudah: Buka file dengan nano: nano file.txt
Tekan CTRL+ Ountuk menyimpan, tetapi sebelum menekan Enter, tekan: ALT+ Duntuk beralih antara akhir baris DOS dan Unix / Linux, atau: ALT+ Muntuk beralih antara akhir baris Mac dan Unix / Linux lalu tekan Enteruntuk menyimpan dan CTRL+ Xuntuk keluar.
melakukan ini pada server linux, file tersebut memiliki ^Makhiran. simpan sebagai dos untuk disimpan, simpan sebagai linux untuk dihapus. dapat memeriksa menggunakancat -v
HattrickNZ
Pertanyaan ini tentang vim, bukan nano.
Grant Birchmeier
5
:g/Ctrl-v Ctrl-m/s///
CtrlMadalah karakter \r, atau carriage return, yang ditambahkan oleh akhir baris DOS. CtrlVmemberitahu vim untuk memasukkan CtrlMkarakter literal di baris perintah.
Secara keseluruhan, perintah ini menggantikan semua \rdengan tidak ada, menghapusnya dari ujung garis.
Ini akan mem-pipe konten buffer Anda saat ini ke perintah dos2unix dan menulis hasilnya di atas konten saat ini. Vim akan meminta untuk memuat kembali file setelah
Biasanya ada dos2unixperintah yang dapat Anda gunakan untuk ini, pastikan Anda membaca manual karena versi GNU dan BSD berbeda pada bagaimana mereka menangani argumen.
jika Anda membuat file di NotePad atau NotePad ++ di windows dan membawanya ke Linux dan membukanya dengan vim, Anda akan melihat ^ M di akhir setiap baris. Untuk menghapus ini,
hexdump -C badfile
dan melihat0x0d 0x0a
"\r\n"
itu adalah masalah Anda.Jawaban:
dos2unix adalah utilitas commandline yang akan melakukan ini, atau
:%s/^M//g
akan jika Anda menggunakan Ctrl- v Ctrl- muntuk memasukkan ^ M, atau Anda bisa:set ff=unix
dan vim akan melakukannya untuk Anda.Documents pada pengaturan 'format file' ada di sini , dan wiki vim memiliki halaman komprehensif tentang konversi akhir baris .
Sebagai alternatif, jika Anda sering memindahkan file, Anda mungkin tidak ingin mengonversinya, tetapi melakukannya
:set ff=dos
, jadi vim akan tahu itu adalah file DOS dan menggunakan konvensi DOS untuk akhir baris.sumber
:%s/^M//g
seharusnya:%s/\r//g
, karena^M
hanya berarti "cocokkan modal" M "di awal baris".:%s/\r//g
bekerja untuk saya, tepuk tangan @Bunykset ff=unix
tidak melakukan apa-apa. Mungkin itu mengkonversi file, tetapi semua^M
karakter masih ada di sana.Ubah ujung garis dalam tampilan:
Ini juga dapat digunakan sebagai operasi penghematan (: w saja tidak akan menyimpan menggunakan ujung garis yang Anda lihat di layar):
Dan Anda dapat menggunakannya dari command-line:
sumber
:w +ff=unix
jauh lebih bagus daripada kebanyakan hal lain yang ditulis di sini, dan skrip bash adalah bonus yang bagus.:e
perintah tidak muncul untuk melakukan apa-apa pada saya Windows vim menginstal. Pandangan saya masih menunjukkan^M
kode.Saya biasanya menggunakan
yang tampaknya sedikit aneh, tetapi bekerja karena cara yang sesuai dengan linefeeds vim. Saya juga merasa lebih mudah diingat :)
sumber
:set ff=unix
sebelumnya, tetapi file yang saya buka hari ini pasti sangat aneh. Vim mengatakan itu sudahfileformat=unix
tetapi semua akhir baris sudah^M
. Solusi ini berhasil untuk saya.:%s/\r//g
alih-alih bekerja untuk saya.:%s/\r//g
adalah satu - satunya solusi tujuan umum - terutama untuk file mode campuran yang berisi campuran heterogen dari baris baru gaya DOS dan UNIX. Solusi kanonik (mis.:set ff=unix
,:e ++ff=unix
) Mengasumsikan setiap baris buffer saat ini berakhir dengan gaya baris baru yang sama. Terkadang mereka melakukannya; terkadang tidak. Isyarat wajah sedih.Saya lebih suka menggunakan perintah berikut:
Anda juga dapat menggunakan
mac
ataudos
untuk mengonversi file Anda masing-masing ke macintosh atau konvensi file MS-DOS / MS-Windows. Dan tidak ada artinya jika file sudah dalam format yang benar.Untuk informasi lebih lanjut, lihat bantuan vim:
sumber
^M
karakter di dalamnya.set fileformat=unix
ke file .vimrc saya berfungsi.:set fileformat=unix
untuk mengkonversi dari dos ke unix.sumber
Di Vim, itu menghapus semua carriage return, dan hanya menyisakan baris baru.
sumber
:%s/\r//g
itu bekerja seperti pesona.dari: http://vim.wikia.com/wiki/Change_end-of-line_format_for_dos-mac-unix
[Esc]:% s / \ r $ //
sumber
Konversi direktori file dari dos ke Unix
Menggunakan baris perintah dan sed, temukan semua file di direktori saat ini dengan ekstensi ".ext" dan hapus semua "^ M"
@ https://gist.github.com/sparkida/7773170
juga, seperti yang disebutkan di atas ^ M = Ctrl+V+ Ctrl+M(jangan ketik simbol "^" dan M)
sumber
dos2unix
dapat langsung memodifikasi isi file.Anda dapat langsung menggunakannya pada file, tanpa perlu pengalihan file sementara.
Di atas menggunakan keyboard AS yang diasumsikan. Gunakan
-
opsi 437 untuk menggunakan keyboard Inggris.sumber
(lihat: http://kb.iu.edu/data/acux.html )
sumber
Langkah-langkah berikut dapat mengonversi format file untuk dos menjadi unix:
Referensi: http://vim.wikia.com/wiki/Change_end-of-line_format_for_dos-mac-unix
sumber
Dengan perintah berikut:
Dapatkan
^M
jenis yang muncul CtrlVkemudian CtrlM. CtrlVmemberitahu Vim untuk mengambil karakter berikutnya yang dimasukkan secara harfiah.sumber
Komentar tentang membuat ^ M muncul adalah apa yang berhasil bagi saya. Hanya mengetik "^ M" di vi saya tidak mendapatkan apa-apa (tidak ditemukan). Urutan CTRL+ V CTRL+ Mmelakukannya dengan sempurna.
Perintah substitusi kerja saya adalah
dan itu terlihat seperti ini di layar saya:
sumber
:%s
bukan:1,$s
.%
adalah singkatan1,$
.Saya menemukan cara yang sangat mudah: Buka file dengan nano:
nano file.txt
Tekan CTRL+ Ountuk menyimpan, tetapi sebelum menekan Enter, tekan: ALT+ Duntuk beralih antara akhir baris DOS dan Unix / Linux, atau: ALT+ Muntuk beralih antara akhir baris Mac dan Unix / Linux lalu tekan Enteruntuk menyimpan dan CTRL+ Xuntuk keluar.
sumber
^M
akhiran. simpan sebagai dos untuk disimpan, simpan sebagai linux untuk dihapus. dapat memeriksa menggunakancat -v
CtrlMadalah karakter
\r
, atau carriage return, yang ditambahkan oleh akhir baris DOS. CtrlVmemberitahu vim untuk memasukkan CtrlMkarakter literal di baris perintah.Secara keseluruhan, perintah ini menggantikan semua
\r
dengan tidak ada, menghapusnya dari ujung garis.sumber
Kamu bisa menggunakan:
atau
dos2unix utility
.sumber
Anda dapat menggunakan perintah berikut: di
:%s/^V^M//g
mana '^' berarti menggunakan CTRLkunci.
sumber
perintah di bawah ini digunakan untuk memformat ulang semua file .sh di direktori saat ini, saya mengujinya di OS Fedora saya.
sumber
Dalam vim, ketik:
Ini akan mem-pipe konten buffer Anda saat ini ke perintah dos2unix dan menulis hasilnya di atas konten saat ini. Vim akan meminta untuk memuat kembali file setelah
sumber
Untuk menjalankan langsung ke konsol linux:
vim file.txt +"set ff=unix" +wq
sumber
Biasanya ada
dos2unix
perintah yang dapat Anda gunakan untuk ini, pastikan Anda membaca manual karena versi GNU dan BSD berbeda pada bagaimana mereka menangani argumen.Versi BSD:
Versi GNU:
Sebagai alternatif, Anda dapat membuat
dos2unix
jawaban Anda sendiri dengan jawaban yang diajukan di sini, misalnya:sumber
Saya tahu saya pernah melihat ini di suatu tempat. Inilah tip login FreeBSD:
Perlu menghapus semua karakter ^ M dari file DOS? Mencoba
sumber
Meskipun topik ini sudah sangat lama, saya ingin memasukkan hal lain dari wikia:
Yang mengisi menemukan semua tanda kembali carriage (satu dan lebih banyak repetisi) hingga akhir baris dan menghapus, jadi hanya
\n
akan tetap di eol.sumber
Ini cara saya. Saya membuka file dalam dos EOL dan ketika saya menyimpan file yang secara otomatis akan dikonversi ke unix EOL
sumber
jika Anda membuat file di NotePad atau NotePad ++ di windows dan membawanya ke Linux dan membukanya dengan vim, Anda akan melihat ^ M di akhir setiap baris. Untuk menghapus ini,
Di terminal Linux Anda, ketik
Ini akan melakukan sihir yang diperlukan.
sumber
Saya ingin baris baru menggantikan huruf M. Perl untuk penyelamatan:
Atau untuk menulis ke stdout:
sumber