Saya mencoba menggunakan sesuatu di bash untuk menunjukkan kepada saya akhiran baris dalam file yang dicetak daripada ditafsirkan. File ini adalah dump dari SSIS / SQL Server yang sedang dibaca oleh mesin Linux untuk diproses.
Apakah ada switch dalam
vi
,less
,more
, dll?Selain melihat akhir baris, saya perlu tahu jenis akhir baris apa (
CRLF
atauLF
). Bagaimana saya mengetahui hal itu?
linux
bash
command-line
newline
line-endings
Marco Ceppi
sumber
sumber
man less
,.Jawaban:
Anda dapat menggunakan
file
utilitas untuk memberi Anda indikasi jenis akhir baris.Unix:
"DOS":
Untuk mengonversi dari "DOS" ke Unix:
Untuk mengonversi dari Unix ke "DOS":
Mengonversi file yang sudah dikonversi tidak memiliki efek sehingga aman untuk dijalankan secara membabi buta (yaitu tanpa menguji formatnya terlebih dahulu) meskipun penolakan biasanya berlaku, seperti biasa.
sumber
tofrodos
paket dengansudo apt-get install tofrodos
- sama seperti Anda harus menjalankansudo apt-get install dos2unix
untuk mendapatkandos2unix
danunix2dos
.dos2unix
gagal di? OP pada pertanyaan itu hanya secara samar-samar menggambarkan masalah tersebut.Dalam
vi
...:set list
untuk melihat garis akhir.:set nolist
untuk kembali normal.Meskipun saya tidak berpikir Anda dapat melihat
\n
atau\r\n
masukvi
, Anda dapat melihat jenis file apa itu (UNIX, DOS, dll.) Untuk menyimpulkan baris mana yang berakhir ...:set ff
Atau,
bash
Anda dapat menggunakanod -t c <filename>
atau hanyaod -c <filename>
untuk menampilkan pengembalian.sumber
:set fileformat
akan melaporkan manaunix
ataudos
vim yang berpikir akhir baris file berada. Anda dapat mengubahnya dengan:set fileformat=unix
.od -t c file/path
, tapi terima kasih untuk program baru. Bekerja dengan baik!Ubuntu 14.04:
cat -e <filename>
pekerjaan sederhana baik-baik saja.Ini menampilkan ujung garis Unix (
\n
atau LF) sebagai$
dan ujung garis Windows (\r\n
atau CRLF) sebagai^M$
.sumber
.txt
file)Di bash shell, coba
cat -v <filename>
. Ini akan menampilkan carriage-returns untuk file windows.(Ini bekerja untuk saya di rxvt via Cygwin pada Windows XP).
Catatan editor:
cat -v
memvisualisasikan\r
karakter (CR). sebagai^M
. Dengan demikian,\r\n
urutan akhir baris akan ditampilkan^M
pada akhir setiap baris output.cat -e
juga akan memvisualisasikan\n
, yaitu sebagai$
. (cat -et
tambahan akan memvisualisasikan karakter tab. as^I
.)sumber
echo -e 'abc\ndef\r\n' | cat -v
dan Anda akan melihat^M
setelah "def".Untuk menampilkan CR seperti yang
^M
kurang digunakanless -u
atau ketik -usekali kurang terbuka.man less
mengatakan:sumber
Coba
file
kemudianfile -k
kemudiandos2unix -ih
file
biasanya akan cukup. Tetapi untuk kasus yang sulit cobafile -k
ataudosunix -ih
.Detail di bawah ini.
Mencoba
file -k
Versi singkat:
file -k somefile.txt
akan memberi tahu Anda.with CRLF line endings
akhir baris DOS / Windows.with LF line endings
akhir MAC line.text
. (Jadi jika tidak secara eksplisit menyebutkan jenisline endings
maka ini secara implisit berarti: "CR line endings" .)Versi panjang lihat di bawah.
Contoh dunia nyata: Pengkodean Sertifikat
Terkadang saya harus memeriksa ini untuk file sertifikat PEM.
Masalahnya dengan teratur
file
adalah ini: Terkadang ia mencoba menjadi terlalu pintar / terlalu spesifik.Mari kita coba kuis kecil: Saya punya beberapa file. Dan salah satu dari file-file ini memiliki akhiran baris yang berbeda. Yang mana?
(Ngomong-ngomong: seperti inilah direktori "pekerjaan sertifikat" saya yang khas.)
Mari kita coba secara teratur
file
:Hah. Itu tidak memberitahuku akhir baris. Dan saya sudah tahu bahwa itu adalah file cert. Saya tidak perlu "mengajukan" untuk mengatakan itu kepada saya.
Apa lagi yang bisa Anda coba?
Anda dapat mencoba
dos2unix
dengan--info
sakelar seperti ini:Jadi itu memberitahu Anda bahwa: yup, "0.example.end.cer" pastilah orang yang aneh. Tapi ujung garis seperti apa yang ada? Apakah Anda tahu format output dos2unix dengan hati? (Bukan saya.)
Tapi untungnya ada opsi
--keep-going
(atau-k
singkatnya) difile
:Luar biasa! Sekarang kita tahu bahwa file ganjil kita memiliki
CRLF
akhiran baris DOS ( ). (Dan file-file lain memilikiLF
akhiran baris Unix ( ). Ini tidak eksplisit dalam output ini. Ini implisit. Hanya carafile
mengharapkan file teks "biasa" menjadi.)(Jika Anda ingin membagikan mnemonik saya: "L" adalah untuk "Linux" dan untuk "LF".)
Sekarang mari kita ubah pelakunya dan coba lagi:
Baik. Sekarang semua sertifikat memiliki akhiran baris Unix.
Mencoba
dos2unix -ih
Saya tidak tahu ini ketika saya menulis contoh di atas tetapi:
Sebenarnya dos2unix akan memberi Anda baris tajuk jika Anda menggunakan
-ih
(kependekan--info=h
) seperti:Dan momen "sebenarnya" lainnya: Format tajuk sangat mudah diingat: Inilah dua mnemonik:
Bacaan lebih lanjut
man file
man dos2unix
sumber
Accounts.java: Java source, ASCII text\012-
pada Windows di MinTTYfile -k Accounts.java
di dalam permen yang datang dengan git-for-windows juga, tetapi versi sayagit version 2.21.0.windows.1
cat -e file_to_test
Anda dapat menggunakan
xxd
untuk menampilkan dump hex file, dan mencari untuk "0d0a" atau "0a" karakter.Anda dapat menggunakan
cat -v <filename>
seperti yang disarankan @warriorpostman.sumber
Anda dapat menggunakan perintah
todos filename
untuk mengkonversi ke ujung DOS, danfromdos filename
untuk mengubah ke ujung baris UNIX. Untuk menginstal paket di Ubuntu, ketiksudo apt-get install tofrodos
.sumber
Anda dapat menggunakan
vim -b filename
untuk mengedit file dalam mode biner, yang akan menampilkan ^ M karakter untuk carriage return dan baris baru menunjukkan LF yang hadir, menunjukkan ujung garis Windows CRLF. Maksud saya LF\n
dan CR maksud saya\r
. Perhatikan bahwa ketika Anda menggunakan opsi -b file akan selalu diedit dalam mode UNIX secara default seperti yang ditunjukkan oleh[unix]
di baris status, yang berarti bahwa jika Anda menambahkan baris baru mereka akan berakhir dengan LF, bukan CRLF. Jika Anda menggunakan vim normal tanpa -b pada file dengan ujung garis CRLF, Anda akan melihat yang[dos]
ditunjukkan di baris status dan baris yang disisipkan akan memiliki CRLF sebagai ujung baris. Dokumentasi vim untukfileformats
pengaturan menjelaskan kerumitan.Juga, saya tidak memiliki cukup poin untuk mengomentari jawaban Notepad ++, tetapi jika Anda menggunakan Notepad ++ di Windows, gunakan menu View / Show Symbol / Show End of Line untuk menampilkan CR dan LF. Dalam hal ini LF ditampilkan sedangkan untuk vim LF ditunjukkan oleh baris baru.
sumber
Saya membuang output saya ke file teks. Saya kemudian membukanya di notepad ++ lalu klik tombol tampilkan semua karakter. Tidak terlalu elegan tapi berhasil.
sumber
Vim - selalu menampilkan baris baru Windows sebagai
^M
Jika Anda lebih suka untuk selalu melihat baris baru Windows di vim render
^M
, Anda dapat menambahkan baris ini ke.vimrc
:Ini akan membuat vim menginterpretasikan setiap file yang Anda buka sebagai file unix. Karena file unix
\n
sebagai karakter baris baru, file windows dengan karakter baris baru\r\n
masih akan di-render dengan benar (terima kasih kepada\n
) tetapi akan ada^M
di akhir file (yang merupakan cara vim merender\r
karakter).Vim - terkadang menampilkan baris baru Windows
Jika Anda lebih suka mengaturnya per file, Anda dapat menggunakannya
:e ++ff=unix
saat mengedit file yang diberikan.Vim - selalu tampilkan tipe file (
unix
vsdos
)Jika Anda ingin garis bawah vim untuk selalu menampilkan apa filetype Anda mengedit sedang (dan Anda tidak memaksa mengatur filetype untuk unix) Anda dapat menambahkan untuk Anda
statusline
denganset statusline+=\ %{&fileencoding?&fileencoding:&encoding}
.Status lengkap saya disediakan di bawah ini. Cukup tambahkan ke
.vimrc
.Ini akan menjadi seperti
di bagian bawah file Anda
Vim - terkadang menampilkan tipe file (
unix
vsdos
)Jika Anda hanya ingin melihat jenis file apa yang Anda miliki, Anda dapat menggunakan
:set fileformat
(ini tidak akan berfungsi jika Anda telah memaksa mengatur tipe file). Ini akan kembaliunix
untuk file unix dandos
untuk Windows.sumber