Apakah ada perintah Bash untuk mengonversi \ r \ n ke \ n?


19

Apakah ada perintah Bash untuk mengonversi \ r \ n ke \ n?

Ketika saya mengunggah skrip saya dari Windows ke Linux, saya memerlukan utilitas seperti ini untuk membuat semuanya berfungsi.


7
dos2unixbiasanya tersedia, jika tidaksed -e 's/\r$//'
falstro

1
Tidak, tidak ada perintah Bash untuk itu, tetapi ada dos2unixyang merupakan program Unix / Linux untuk melakukan apa yang Anda inginkan.
Dijeda sampai pemberitahuan lebih lanjut.

1
Mengapa Anda tidak menggunakan editor teks waras yang memungkinkan Anda memilih gaya baris baru saat menyimpan file?
vtest

Jawaban:


28

Ada:

dos2unix

Ini adalah jawaban yang secara historis benar, meskipun dos2unix tidak selalu tersedia akhir-akhir ini.
Jared

5

Terjemahan ( tr ) tersedia di semua Unix:

tr -d '\r'  # From \r\n line end (DOS/Windows), the \r will be removed so \n line end (Unix) remains.

1
Memiliki efek samping menghapus yang lain \rjuga. Mereka sangat jarang.
ivan_pozdeev

5

Dengan sed dan temukan yang diakhiri dengan .txt, .php, .js, .css:

 sed -rie 's/\r\n/\n/' \
 $(find . -type f -iregex ".*\.\(txt\|php\|js\|css\)")

5

Ada utilitas Unix yang disebut convyang dapat mengkonversi akhir baris. Hal ini sering dipanggil dengan softlinks untuk u2datau d2uatau unix2dosatau dos2unix.

Selain itu ada utilitas yang dipanggil fromdosdan todos.


2

Menggunakan man 1 ed (yang mengedit file di tempat tanpa cadangan sebelumnya - tidak seperti: sed .. -i ".bak" ...):

ed -s file <<< $'H\ng/\r*$/s///\nwq'

Aku bahkan tidak tahu ed, tapi itu berhasil (lama tapi emas)
dwana

Perintah ini berfungsi untuk saya ketika perintah dari jawaban lain tidak ada pada hosting bersama yang saya gunakan. Terima kasih :)
FKasa

2

Melakukan ini dengan POSIX itu rumit:

  • POSIX Sed tidak mendukung \ratau \15. Bahkan jika itu terjadi, opsi di tempat -ibukanlah POSIX

  • POSIX Awk mendukung \rdan \15, bagaimanapun, -i inplacepilihannya bukan POSIX

  • d2u dan dos2unix bukan utilitas POSIX , tetapi ex adalah

  • POSIX ex tidak mendukung \r, \15, \natau\12

Untuk menghapus pengembalian carriage:

awk 'BEGIN{RS="\1";ORS="";getline;gsub("\r","");print>ARGV[1]}' file

Untuk menambahkan carriage return:

awk 'BEGIN{RS="\1";ORS="";getline;gsub("\n","\r&");print>ARGV[1]}' file


0

$ recode dos .. FILE
$ flip -u FILE

(Masing-masing juga ada untuk sistem non-Ubuntu, tetapi tautan ini berguna.)

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.