Apa itu `^ M` dan bagaimana cara saya menghilangkannya?


134

Ketika saya membuka file vim, saya melihat ^Mkarakter aneh .

Sayangnya, mesin pencari favorit di dunia tidak bekerja dengan baik dengan karakter khusus dalam permintaan, jadi saya bertanya di sini:

  • ^MKarakter apa ini ?

  • Bagaimana itu bisa ada di sana?

  • Bagaimana saya menyingkirkannya?


3
Vlastimil itu adalah suntingan yang sia-sia. Got adalah bentuk lampau yang tepat dalam Bahasa Inggris Britania.
Jesse_b

1
Ini adalah digraf karakter kontrol, untuk info lebih lanjut: help digraph-table.
Eric Leschinski

Jawaban:


108

Ini ^Madalah karakter carriage-return. Jika Anda melihat ini, Anda mungkin melihat file yang berasal dari dunia DOS / Windows, di mana end-of-line ditandai oleh pasangan carriage return / newline, sedangkan di dunia Unix, end-of-line ditandai oleh satu baris baru.

Baca artikel ini untuk detail lebih lanjut, dan juga entri Wikipedia untuk baris baru .

Artikel ini membahas cara mengatur vim untuk mengedit file secara transparan dengan berbagai penanda end-of-line.

Jika Anda memiliki file dengan ^Mdi akhir beberapa baris dan Anda ingin menyingkirkannya, gunakan ini di Vim:

:s/^M$//

(Tekan Ctrl+ V Ctrl+ Muntuk menyisipkan itu ^M.)


11
:%s/^M/\r/gAlih-alih, coba hapus ^Mdan ganti ^Mdengan karakter baris baru \r. Tanpa %, perintah hanya berlaku untuk baris saat ini. Dan saya menemukan beberapa contoh di mana ^Mtidak ada di ujung jalur, sepertiThe first line.^MThe second line.
George

Atau jika Anda tidak ingin banyak jeda baris yang bisa Anda lakukan:%s/^M/
hati1

2
Jika hanya carriage return dengan sendirinya, itu mungkin jeda baris Macintosh klasik (pra-Unix). Bahkan beberapa program yang lebih baru seperti Excel 2007 untuk Mac melakukan itu untuk beberapa alasan.
sudo

@ larsks Tapi altap.cz/salamander/help/salamand/appendix_txtfiles mengatakan bahwa ^Mini digunakan di UNIX
Vivek

Artikel yang Anda tautkan mengatakan yang \ndigunakan di Unix, mana yang benar. Itu adalah kode ASCII 10, atau dikenal sebagai ^J.
larsks

39

Sebagian besar sistem operasi UNIX memiliki utilitas yang disebut dos2unixyang akan mengubah CRLF ke LF. Jawaban lainnya mencakup pertanyaan "apa yang mereka".


36

Cara sederhana untuk melakukan ini adalah dengan menggunakan perintah berikut:

dos2unix filename

Perintah ini juga berfungsi dengan pola lintasan, Eg

dos2unix path/name*

Jika tidak berhasil, coba gunakan mode yang berbeda:

dos2unix -c mac filename
  • -cTetapkan mode konversi. Di mana CONVMODE adalah salah satu dari: ascii, 7bit, iso, macdengan asciimenjadi default.

22

Ini berhasil untuk saya

:e ++ff=dos 

Perintah: e ++ ff = dos memberi tahu Vim untuk membaca file lagi, memaksa format file dos. Vim akan menghapus ujung garis CRLF dan hanya LF, hanya menyisakan teks dari setiap baris dalam buffer.

kemudian

:set ff=unix 

dan akhirnya

:wq 

3
Terima kasih! ini bekerja untuk saya tetapi solusi yang diterima tidak
penggemar Bjorks nomor satu

Apakah ffmengacu pada format file? Bagaimana dengan ++ff?
KcFnMi

Perintah: e ++ ff = dos memberi tahu Vim untuk membaca file lagi, memaksa format file dos. Vim akan menghapus ujung garis CRLF dan hanya LF, hanya menyisakan teks dari setiap baris dalam buffer.
Stryker

10

Cara lain untuk menghilangkan carriage return adalah dengan trperintah.

Saya memiliki skrip kecil yang terlihat seperti ini

#!/bin/sh
tmpfile=$(mktemp)
tr -d '\r' <"$1" >"$tmpfile"
mv "$tmpfile" "$1"

6

Anda dapat membersihkan ini dengan sed:

sed -e 's/^M$//' < infile > outfile

Caranya adalah bagaimana memasukkan carriage-return dengan benar. Secara umum, Anda perlu mengetik C-v C-muntuk memasukkan carriage return secara literal. Anda juga dapat melakukan pekerjaan sed

sed -i.bak -e 's/^M$//' infile

2

Apa ini ^ M?
^ M adalah karakter carriage-return. Jika Anda melihat ini, Anda mungkin melihat file yang berasal dari dunia DOS / Windows, di mana end-of-line ditandai oleh pasangan carriage return / newline, sedangkan di dunia Unix, end-of-line ditandai oleh satu baris baru.

Bagaimana itu bisa sampai di sana?
Ketika ada perubahan dalam format file.

Bagaimana saya menyingkirkannya?
buka file Anda dengan

vim -b FILE_PATH

simpan dengan perintah berikut

:%s/^M//g

Anda telah salah ketik membuka filr Anda .
Mateusz Piotrowski

4
Jawaban ini tidak menambahkan apa pun ke jawaban lain. Paragraf pertama hampir merupakan salinan kata demi kata dari jawaban yang diterima. Kode yang diberikan tidak akan menyimpan apa pun, tetapi cukup hapus semua karakter carriage return dari semua baris. Dan saya tidak yakin bagaimana membuka file dalam mode biner akan membantu di sini.
Dubu

2

Dalam hal ini,

Tidak ada yang berhasil, saya memiliki file CSV yang disalin ke mesin Linux dari mac saya dan saya menggunakan semua perintah di atas tetapi tidak ada yang membantu kecuali yang di bawah ini

tr "\015" "\n" < inputfile > outputfile

Saya punya file di mana ^ M karakter sandwitched antara baris sesuatu seperti di bawah ini

Audi,A4,35 TFSi Premium,,CAAUA4TP^MB01BNKT6TG,TRO_WBFB_500,Trico,CARS,Audi,A4,35 TFSi Premium,,CAAUA4TP^MB01BNKTG0A,TRO_WB_T500,Trico,

0

Anda dapat menggunakan Vim dalam mode Ex:

ex -bsc '%s/\r//|x' file
  1. -b mode biner

  2. % pilih semua garis

  3. s pengganti

  4. \r Kereta kembali

  5. x Simpan dan tutup


0

Tambahkan baris berikut ke ~ / .vimrc Anda

command! Tounix :call Preserve('1,$s/^M//')

Kemudian ketika Anda memiliki file dengan ujung baris Windows, jalankan perintah ": Tounix".


-1

Di masa lalu, saya telah melihat bahkan file konfigurasi tidak diuraikan dengan benar dan mengeluh tentang spasi putih, tetapi jika Anda vi dan melakukan daftar set itu tidak akan menampilkan spasi, grep nama file [[spasi]] akan menunjukkan kepada Anda ^ M

saat itulah dos2unix filemembantu


Jawaban ini tidak membawa apa pun yang baru, does2unix sudah disebutkan setidaknya dalam dua jawaban yang jauh lebih tua.
Rui F Ribeiro
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.