it-swarm-id.com

Konversi ujung garis DOS ke ujung garis Linux di vim

Jika saya membuka file yang saya buat di Windows, semua baris diakhiri dengan ^M.
Bagaimana cara saya menghapus karakter ini sekaligus?

652
Bert Hekman

dos2unix adalah utilitas commandline yang akan melakukan ini, atau :%s/^M//g akan jika Anda menggunakan Ctrl-vCtrl-m untuk memasukkan ^ M, atau Anda dapat :set ff=unix dan vim akan melakukannya untuk Anda.

Documents pada pengaturan 'format file' adalah di sini , dan wiki vim memiliki halaman komprehensif pada konversi akhir baris .

Secara bergantian, jika Anda sering memindahkan file, Anda mungkin tidak ingin mengonversinya, tetapi melakukan :set ff=dos, jadi vim akan tahu itu file DOS dan menggunakan konvensi DOS untuk akhiran baris.

995
pjz

Ubah ujung garis dalam tampilan:

:e ++ff=dos
:e ++ff=mac
:e ++ff=unix

Ini juga dapat digunakan sebagai operasi penghematan (: w saja tidak akan menyimpan menggunakan ujung garis yang Anda lihat di layar):

:w ++ff=dos
:w ++ff=mac
:w ++ff=unix

Dan Anda dapat menggunakannya dari command-line:

for file in *.cpp
do 
    vi +':w ++ff=unix' +':q' "$file"
done
250
Ludvig A. Norin

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 :)

154
t-dub

Saya lebih suka menggunakan perintah berikut:

:set fileformat=unix

Anda juga dapat menggunakan mac atau dos untuk masing-masing mengonversi file Anda ke Macintosh atau konvensi file MS-DOS/MS-Windows. Dan tidak ada gunanya jika file sudah dalam format yang benar.

Untuk informasi lebih lanjut, lihat bantuan vim:

:help fileformat
79
Sylvain Defresne
:%s/\r+//g

Di Vim, itu menghapus semua carriage return, dan hanya menyisakan baris baru.

19
mercutio

:set fileformat=unix untuk mengkonversi dari dos ke unix.

16
13
Alex Gartrell

dos2unix dapat langsung memodifikasi konten file.

Anda dapat langsung menggunakannya pada file, tanpa perlu pengalihan file sementara.

dos2unix input.txt input.txt

Di atas menggunakan keyboard AS yang diasumsikan. Gunakan opsi -437 untuk menggunakan keyboard Inggris.

dos2unix -437 input.txt input.txt
9

Ubah 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/777317

find $(pwd) -type f -name "*.ext" | while read file; do sed -e 's/^M//g' -i "$file"; done;

juga, seperti yang disebutkan di atas ^ M Ctrl+V + Ctrl+M (jangan ketik simbol "^" tanda dan M)

7
Sparkida
tr -d '\15\32' < winfile.txt > unixfile.txt

(lihat: http://kb.iu.edu/data/acux.html )

6
MichaelD

Dengan perintah berikut:

:%s/^M$//g 

Dapatkan ^M agar muncul ketik CtrlV kemudian CtrlMCtrlV memberitahu Vim untuk mengambil karakter berikutnya yang dimasukkan secara harfiah.

5
Dave Webb

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.

Referensi: http://vim.wikia.com/wiki/Change_end-of-line_format_for_dos-mac-unix

5
ajitomatix

Kamu bisa memakai:

vim somefile.txt +"%s/\r/\r/g" +wq

atau dos2unix utility.

4
Christy Wald
:g/Ctrl-v Ctrl-m/s///

CtrlM adalah karakter \r, atau carriage return, yang ditambahkan oleh akhir baris DOS. CtrlV memberitahu vim untuk memasukkan literal CtrlM karakter di baris perintah.

Secara keseluruhan, perintah ini menggantikan semua \r dengan tidak ada, menghapusnya dari ujung baris.

4
Rob Wells

Komentar tentang membuat M muncul adalah apa yang berhasil bagi saya. Hanya mengetik "^ M" di vi saya tidak mendapat apa-apa (tidak ditemukan). Itu CTRL+VCTRL+M urutan melakukannya dengan sempurna.

Perintah substitusi kerja saya adalah

:%s/Ctrl-V Ctrl-M/\r/g

dan itu terlihat seperti ini di layar saya:

:%s/^M/\r/g
4
Dannid

Saya menemukan cara yang sangat mudah: Buka file dengan nano: nano file.txt

Tekan CTRL+O untuk menyimpan, tetapi sebelum menekan Enter, tekan: ALT+D untuk beralih antara akhir baris DOS dan Unix/Linux, atau: ALT+M untuk beralih antara akhir baris Mac dan Unix/Linux, lalu tekan Enter untuk menyimpan dan CTRL+X berhenti.

4
Stefan Sjöberg

Anda dapat menggunakan perintah berikut:
:%s/^V^M//g
di mana '^' berarti digunakan CTRL kunci.

3
JayG

perintah di bawah ini digunakan untuk memformat ulang semua file .sh di direktori saat ini, saya mengujinya di OS Fedora saya.

for file in *.sh; do awk '{ sub("\r$", ""); print }' $file >luxubutmp; cp -f luxubutmp $file; rm -f luxubutmp ;done
2
user3220487

Saya tahu saya pernah melihat ini di suatu tempat. Inilah tip login FreeBSD:

Perlu menghapus semua karakter ^ M dari file DOS? Mencoba

tr -d \\r < dosfile > newfile
    -- Originally by Dru <[email protected]>
1
Albaro Pereyra

Biasanya ada perintah dos2unix yang dapat Anda gunakan untuk ini, pastikan Anda membaca manual karena GNU dan versi BSD berbeda tentang bagaimana mereka menangani argumen.

Versi BSD:

dos2unix $FILENAME $FILENAME_OUT
mv $FILENAME_OUT $FILENAME

Versi GNU:

dos2unix $FILENAME

Atau, Anda dapat membuat dos2unix Anda sendiri dengan jawaban yang diajukan di sini, misalnya:

function dos2unix(){
    [ "${!}" ] && [ -f "{$1}" ] || return 1;

    { echo ':set ff=unix';
      echo ':wq';
    } | vim "${1}";
}
1
dsm

Untuk menjalankan langsung ke konsol linux: vim file.txt +"set ff=unix" +wq

1
CBuzatu

Dalam vim, ketik:

:w !dos2unix %

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

1
Tallak Tveide

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

dos2unix filename.ext

Ini akan melakukan sihir yang diperlukan.

0
Santle Camilus

Meskipun topik ini sudah sangat tua, saya ingin memasukkan hal lain dari wikia:

%s/\r\+$//g

yang mengisi menemukan semua tanda kembali carriage (satu dan lebih banyak repetisi) hingga akhir baris dan menghapus, jadi hanya \n akan tetap di eol.

0
loadaverage

Ini cara saya. Saya membuka file dalam dos EOL dan ketika saya menyimpan file yang secara otomatis akan dikonversi ke unix EOL

autocmd BufWrite * :set ff=unix
0
Thomas PABST

Saya ingin baris baru menggantikan huruf M. Perl untuk penyelamatan:

Perl -pi.bak -e 's/\x0d/\n/g' Excel_created.txt

Atau untuk menulis ke stdout:

Perl -p -e 's/\x0d/\n/g' < Excel_created.txt
0
user3379574