Bagaimana menghapus Ctrl-M dari file yang dos2unix, perl, tr, dan sed tidak ada?

9

Misalkan Anda bekerja pada server unix yang sangat tua mana dos2unix, perl, tr, dan sedtidak hadir. Bagaimana Anda dapat mengkonversi file dari dos ke format unix ?

Hemant
sumber
sed diizinkan?
elmarco
@elmarco: no :(
Hemant
9
Berapa umur server unix untuk tidak memilikinya trdan sed? sedsudah tua ........ iirc,
xenoterracide
1
Apakah exatau edtersedia pada sistem seperti itu? Saya tidak akan menyebutnya unix jika tidak ada tratau sed.
MattBianco
3
Tidak ada sed? Betulkah!? Karena ketertarikan, apa sistemnya? Seperti yang ditunjukkan Gilles dan MattBianco, itu mungkin masih memiliki edsetidaknya.
Mikel

Jawaban:

12

Saya pikir Anda mengacu menghapus caret-M di akhir baris. Anda dapat menggunakan pencarian dan ganti vi untuk melakukan ini.

Dalam vi saya biasanya melakukan: (di mana "^" mewakili CTRL):

:%s/^V^M//g

Yang ditampilkan di layar sebagai:

:%s/^M//g
jjclarkson
sumber
terima kasih itu berhasil :). Saya pikir ini solusi yang sangat portabel.
Hemant
4
Anda juga dapat menggunakan sed untuk melakukan hal yang sama tanpa harus me-vim file: sed -e '% s / ^ V ^ M // g' nama file Itu juga akan ditampilkan di layar sebagai sed e '% s / ^ M // g 'filename Secara umum, jika Anda dapat mencari / menggantinya dalam vim, perintahnya hampir sama.
gabe.
2
@ gabe: solusi sed sebenarnya +1 bahkan lebih portabel :)
wzzrd
@wzzrd, seddan vikeduanya ditentukan oleh POSIX , dan viperintah itu tidak menggunakan ekstensi Vim.
Wildcard
@ jjclarkson apa artinya ^Vdan '^ M'?
Cokedude
6

Server tanpa tratau sedharus benar-benar tua, atau melewatkan beberapa perintah dasar. Semoga edada di sana; itu ada di Unix edisi pertama .

ed /path/to/file
1,$s/^V^M$//
w
q

di mana ^V^Mberarti mengetik Ctrl+ Vlalu Ctrl+ M(untuk memasukkan umpan garis literal). Jika Anda tahu bahwa semua baris diakhiri dengan CR LF, Anda dapat menggunakan 1,$s/.$//sebagai gantinya (menghapus karakter terakhir pada setiap baris).

Gilles 'SANGAT berhenti menjadi jahat'
sumber