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.

pengguna25321
sumber
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
RaYell
sumber
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.
Peter Mortensen
sumber
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\)")
fitorec
sumber
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.

Steven Penny
sumber
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'

sumber
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
Steven Penny
sumber
0

Ya, gunakan dos2unix. Sebagai contoh:

[justin@mybox ~]$ dos2unix myfile
Justin Ethier
sumber
0

$ recode dos .. FILE
$ flip -u FILE

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


sumber