Ketika saya menjalankan skrip SQL tertentu di lingkungan Unix, saya melihat karakter '^ M' di akhir setiap baris skrip SQL saat itu bergema ke baris perintah. Saya tidak tahu di OS mana skrip SQL awalnya dibuat.
Apa yang menyebabkan ini dan bagaimana cara memperbaikinya?
sql
unix
newline
line-endings
os-dependent
Paul Reiners
sumber
sumber
brew install dos2unix
menginstal homebrewPerbaiki akhiran baris
vi
dengan menjalankan yang berikut ini::set fileformat=unix
:w
sumber
^M
s karena alasan tertentu. file referensi:/etc/timidity/fluidr3_gm.cfg
.Penyebabnya adalah perbedaan antara bagaimana OS berbasis Windows dan OS berbasis Unix menyimpan penanda akhir baris.
Sistem operasi berbasis Windows, berkat warisan DOS mereka, menyimpan end-of-line sebagai sepasang karakter -
0x0D0A
(carriage return + line feed). Sistem operasi berbasis Unix hanya menggunakan0x0A
( umpan baris ). Yang^M
Anda lihat adalah representasi visual dari0x0D
( kereta kembali ).dos2unix akan membantu dengan ini. Anda mungkin juga perlu menyesuaikan sumber skrip menjadi 'ramah Unix'.
sumber
^M
? Mengapa '^'? Mengapa 'M'?Cara termudah adalah dengan menggunakan
vi
.Saya tahu kedengarannya mengerikan tetapisederhana dan sudah diinstal di sebagian besar lingkungan UNIX. ^ M adalah baris baru dari lingkungan Windows / DOS.dari prompt perintah:
$ vi filename
Lalu tekan "
:
" untuk masuk ke mode perintah.Search and Replace all Globally is
:%s/^M//g
" Tekan dan tahan kontrol lalu tekan V lalu M " yang akan menggantikan ^ M dengan tidak ada.Kemudian untuk menulis dan keluar masukkan "
:wq
" Selesai!sumber
Coba gunakan dos2unix untuk menghapus ^ M.
sumber
Di vi, lakukan a
:%s/^M//g
Untuk mendapatkan tombol
^M
tahan CTRL, tekan Vlalu M(Keduanya sambil menahan tombol kontrol) dan^M
akan muncul. Ini akan menemukan semua kejadian dan menggantikannya dengan apa-apa.sumber
:%s/^M/\r/g
Skrip SQL awalnya dibuat di OS Windows. Karakter '^ M' adalah hasil dari Windows dan Unix yang memiliki ide berbeda tentang apa yang akan digunakan untuk karakter akhir baris. Anda dapat menggunakan perl di baris perintah untuk memperbaikinya.
sumber
^ M biasanya disebabkan oleh baris baru operator Windows, dan diterjemahkan ke Unix terlihat seperti ^ M. Perintah dos2unix harus menghapusnya dengan baik
dos2unix [opsi] [-c kode konv] [-o file ...] [-n infile outfile ...]
sumber
Sed bahkan lebih banyak tersedia dan dapat melakukan hal semacam ini juga jika dos2unix tidak diinstal
Anda juga dapat mencoba tr:
Berikut hasilnya:
sumber
Untuk mengganti karakter ^ M di editor vi gunakan di bawah ini
buka file teks katakan t1.txt
Masuk ke mode perintah dengan menekan
shift + :
lalu tekan tombol seperti yang disebutkan
%s/^M/\r/g
sumber
Alternatif untuk
dos2unix
perintah akan menggunakan utilitas standar sepertised
.Misalnya, dos untuk unix:
unix ke dos:
sumber
Anda dapat menghapus ^ M dari file secara langsung melalui perintah sed, misalnya:
Jika Anda senang dengan perubahan tersebut, hapus file .bak:
sumber
Ubah akhir baris DOS / Windows (\ r \ n) menjadi akhir baris Unix (\ n), dengan tr:
Posting tentang mengganti baris baru dari baris perintah Unix
sumber
od -a $file
berguna untuk mengeksplorasi jenis pertanyaan tersebut di Linux (mirip dengan dumphex di atas).sumber
Di Perl, jika Anda tidak ingin menyetel $ / variable dan menggunakan chomp (), Anda juga bisa melakukan:
Dua sen saya
sumber
Perintah vi lain yang akan dilakukan:
:%s/.$//
Ini menghapus karakter terakhir dari setiap baris di file. Kelemahan dari perintah cari dan ganti ini adalah tidak peduli apa karakter terakhirnya, jadi berhati-hatilah untuk tidak memanggilnya dua kali.sumber