it-swarm-id.com

Karakter '^ M' di akhir baris

Ketika saya menjalankan skrip SQL tertentu di lingkungan Unix, saya melihat karakter '^ M' di akhir setiap baris skrip SQL saat digemakan ke baris perintah. Saya tidak tahu OS mana yang awalnya dibuat skrip SQL.

Apa yang menyebabkan ini dan bagaimana cara memperbaikinya?

97
Paul Reiners

Ini disebabkan oleh karakter akhir baris DOS/Windows. Seperti yang dikatakan Andy Whitfield, perintah Unix dos2unix akan membantu memperbaiki masalah. Jika Anda ingin informasi lebih lanjut, Anda dapat membaca halaman manual untuk perintah itu.

77
Thomas Owens

Perbaiki akhir baris dalam vi dengan menjalankan yang berikut:

:set fileformat=unix

:w

74
Tim Abell

Penyebabnya adalah perbedaan antara bagaimana OS berbasis Windows dan OS berbasis Unix menyimpan penanda end-of-line.

Sistem operasi berbasis Windows, berkat warisan DOS mereka, menyimpan end-of-line sebagai pasangan karakter - 0x0D0A (carriage return + line feed). Sistem operasi berbasis Unix hanya menggunakan 0x0A (a mpan baris ). ^M yang Anda lihat adalah representasi visual dari 0x0D (a carriage return ).

dos2unix akan membantu dengan ini. Anda mungkin juga perlu menyesuaikan sumber skrip untuk menjadi 'Ramah-Unix'.

39
ColinYounger

Cara termudah adalah menggunakan viSaya tahu itu terdengar mengerikan tetapi ini sederhana dan sudah diinstal pada sebagian besar lingkungan UNIX. ^ M adalah baris baru dari lingkungan Windows/DOS.

dari perintah Prompt: $ vi filename

Lalu tekan ": "untuk sampai ke mode perintah.

Cari dan Ganti semua Global adalah :%s/^M//g "Tekan dan tahan kontrol lalu tekan V lalu M" yang akan menggantikan ^ M dengan apa-apa.

Kemudian untuk menulis dan berhenti memasukkan ":wq "Selesai!

24
Bernie Perez

Coba gunakan dos2unix untuk menghapus ^ M.

13
Andy Whitfield

In vi, lakukan :%s/^M//g

Untuk mendapatkan ^M pegang CTRL tombol, tekan V kemudian M (Keduanya sambil menahan tombol kontrol) dan ^M akan muncul. Ini akan menemukan semua kejadian dan menggantinya dengan apa-apa.

9
dogbane

Skrip SQL pada awalnya dibuat pada OS Windows. Karakter '^ M' adalah hasil dari Windows dan Unix yang memiliki ide berbeda tentang apa yang harus digunakan untuk karakter end-of-line. Anda dapat menggunakan Perl di baris perintah untuk memperbaikinya.

Perl -pie 's/\r//g' filename.txt
8
Bill the Lizard

^ M biasanya disebabkan oleh baris baru operator Windows, dan diterjemahkan ke Unix terlihat seperti ^ M. Perintah dos2unix harus menghapusnya dengan baik

dos2unix [options] [-c convmode] [-o file ...] [-n infile outfile ...]

7
jW.
C:\tmp\text>dos2unix hello.txt helloUNIX.txt

Sed bahkan lebih banyak tersedia dan dapat melakukan hal semacam ini juga jika dos2unix tidak diinstal

C:\tmp\text>sed s/\r// hello.txt > helloUNIX.txt  

Anda juga dapat mencoba tr:

cat hello.txt | tr -d \r > helloUNIX2.txt  

Inilah hasilnya:

C:\tmp\text>dumphex hello.txt  
00000000h: 48 61 68 61 0D 0A 68 61 68 61 0D 0A 68 61 68 61 Haha..haha..haha  
00000010h: 0D 0A 0D 0A 68 61 68 61 0D 0A                   ....haha..  

C:\tmp\text>dumphex helloUNIX.txt  
00000000h: 48 61 68 61 0A 68 61 68 61 0A 68 61 68 61 0A 0A Haha.haha.haha..  
00000010h: 68 61 68 61 0A                                  haha.  

C:\tmp\text>dumphex helloUNIX2.txt  
00000000h: 48 61 68 61 0A 68 61 68 61 0A 68 61 68 61 0A 0A Haha.haha.haha..  
00000010h: 68 61 68 61 0A                                  haha.  
5
JGurtz

Untuk mengganti ^ M karakter dalam editor vi, gunakan di bawah ini

buka file teks say t1.txt

vi t1.txt

Masuk ke mode perintah dengan menekan shift + :

lalu tekan tombol seperti yang disebutkan %s/^M/\r/g

in above ^M is not (shift + 6)M instead it is (ctrl + V)(ctrl + M)
4

Alternatif untuk dos2unix perintah akan menggunakan utilitas standar seperti sed.

Misalnya, dos untuk unix:

sed 's/\r$//' dos.txt > unix.txt

unix to dos:

sed 's/$/\r/' unix.txt > dos.txt
3
g4th

Konversi akhir baris DOS/Windows (\ r\n) ke akhiran baris Unix (\ n), dengan tr:

tr '\r\n' '\n' < dosFile.txt > unixFile.txt

Posting tentang mengganti baris baru dari baris perintah Unix

1
Mason Wright

Anda dapat menghapus ^ M dari file secara langsung melalui perintah sed, mis .:

sed -i'.bak' s/\r//g *.*

Jika Anda puas dengan perubahannya, hapus file .bak:

rm -v *.bak
1
kenorb

Di Perl, jika Anda tidak ingin mengatur $/variabel dan menggunakan chomp () Anda juga dapat melakukan:

$var =~ /\r\n//g;

Dua sen saya

0
Ariel Monaco

od -a $file berguna untuk mengeksplorasi jenis-jenis pertanyaan di Linux (mirip dengan dumphex di atas).

0
Allan Wind