Jika saya membuka file yang saya buat di Windows, semua baris berakhir dengan ^M
.
Bagaimana cara saya menghapus karakter ini sekaligus?
Jika saya membuka file yang saya buat di Windows, semua baris berakhir dengan ^M
.
Bagaimana cara saya menghapus karakter ini sekaligus?
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.
:%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 @Bunyk
set ff=unix
tidak melakukan apa-apa. Mungkin itu mengkonversi file, tetapi semua ^M
karakter masih ada di sana.
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
: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
:%s/\r/\r/g
yang tampaknya sedikit aneh, tetapi bekerja karena cara yang sesuai dengan linefeeds vim. Saya juga merasa lebih mudah diingat :)
:set ff=unix
sebelumnya, tetapi file yang saya buka hari ini pasti sangat aneh. Vim mengatakan itu sudah fileformat=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:
:set fileformat=unix
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:
:help fileformat
^M
karakter di dalamnya.
set fileformat=unix
ke file .vimrc saya berfungsi.
:set fileformat=unix
untuk mengkonversi dari dos ke unix.
dari: http://vim.wikia.com/wiki/Change_end-of-line_format_for_dos-mac-unix
[Esc]:% s / \ r $ //
@ https://gist.github.com/sparkida/7773170
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 "^" dan M)
dos2unix
dapat langsung memodifikasi isi 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
tr -d '\15\32' < winfile.txt > unixfile.txt
(lihat: http://kb.iu.edu/data/acux.html )
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
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
:%s/Ctrl-V Ctrl-M/\r/g
dan itu terlihat seperti ini di layar saya:
:%s/^M/\r/g
:%s
bukan :1,$s
. %
adalah singkatan 1,$
.
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.
^M
akhiran. simpan sebagai dos untuk disimpan, simpan sebagai linux untuk dihapus. dapat memeriksa menggunakancat -v
: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 \r
dengan tidak ada, menghapusnya dari ujung garis.
Kamu bisa menggunakan:
vim somefile.txt +"%s/\r/\r/g" +wq
atau dos2unix utility
.
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
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:
dos2unix $FILENAME $FILENAME_OUT
mv $FILENAME_OUT $FILENAME
Versi GNU:
dos2unix $FILENAME
Sebagai alternatif, Anda dapat membuat dos2unix
jawaban Anda sendiri dengan jawaban yang diajukan di sini, misalnya:
function dos2unix(){
[ "${!}" ] && [ -f "{$1}" ] || return 1;
{ echo ':set ff=unix';
echo ':wq';
} | vim "${1}";
}
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 <genesis@istar.ca>
Meskipun topik ini sudah sangat lama, 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.
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
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.
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
hexdump -C badfile
dan melihat0x0d 0x0a
"\r\n"
itu adalah masalah Anda.