Có lệnh Bash để chuyển đổi \ r \ n thành \ n không?


19

Có lệnh Bash để chuyển đổi \ r \ n thành \ n không?

Khi tôi tải tập lệnh của mình từ Windows lên Linux, tôi cần một tiện ích như thế này để mọi thứ hoạt động.


7
dos2unixthường có sẵn, nếu khôngsed -e 's/\r$//'
falstro

1
Không, không có lệnh Bash cho điều đó, nhưng dos2unixđó là chương trình Unix / Linux để làm những gì bạn muốn.
Tạm dừng cho đến khi có thông báo mới.

1
Tại sao bạn không sử dụng trình soạn thảo văn bản lành mạnh cho phép bạn chọn kiểu dòng mới khi lưu tệp?
vtest

Câu trả lời:


28

Có:

dos2unix

Đây là câu trả lời đúng trong lịch sử, mặc dù dos2unix không phải lúc nào cũng có sẵn trong những ngày này.
Jared

5

Dịch ( tr ) có sẵn trong tất cả các Unix:

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

1
Cũng có tác dụng phụ trong việc loại bỏ bất kỳ cái nào khác \r. Chúng rất không phổ biến mặc dù.
ivan_pozdeev

5

Với sed và tìm thấy kết thúc với .txt, .php, .js, .css:

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

5

Có một tiện ích Unix được gọi là convcó thể chuyển đổi kết thúc dòng. Nó thường được gọi với softlinks đến u2dhay d2uhay unix2doshay dos2unix.

Ngoài ra, còn có các tiện ích được gọi fromdostodos.


2

Sử dụng man 1 ed (chỉnh sửa các tệp tại chỗ mà không cần bất kỳ bản sao lưu nào trước đó - không giống như: sed .. -i ".bak" ...):

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

Tôi thậm chí không biết ed, nhưng nó thực hiện công việc (cũ nhưng vàng)
dwana

Lệnh này hoạt động với tôi khi các lệnh từ các câu trả lời khác không tồn tại trên dịch vụ lưu trữ được chia sẻ mà tôi đang sử dụng. Cảm ơn :)
FKasa

2

Làm điều này với POSIX rất khó:

  • POSIX Sed không hỗ trợ \rhoặc \15. Ngay cả khi nó đã làm, tùy chọn tại chỗ -ikhông phải là POSIX

  • POSIX Awk không hỗ trợ \r\15, tuy nhiên-i inplace tùy chọn không phải là POSIX

  • d2udos2unix không phải là tiện ích POSIX , nhưng ex

  • POSIX cũ không hỗ trợ \r, \15, \nhoặc\12

Để loại bỏ trả lại vận chuyển:

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

Để thêm lợi nhuận vận chuyển:

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


0

$ recode dos .. FILE
$ flip -u TẬP_TIN

(Mỗi cái cũng tồn tại cho các hệ thống không phải Ubuntu, nhưng các liên kết này rất tiện dụng.)

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.