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.
dos2unix
đó là chương trình Unix / Linux để làm những gì bạn muốn.
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.
dos2unix
đó là chương trình Unix / Linux để làm những gì bạn muốn.
Câu trả lời:
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.
\r
. Chúng rất không phổ biến mặc dù.
Có một tiện ích Unix được gọi là conv
có thể chuyển đổi kết thúc dòng. Nó thường được gọi với softlinks đến u2d
hay d2u
hay unix2dos
hay dos2unix
.
Ngoài ra, còn có các tiện ích được gọi fromdos
và todos
.
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'
Làm điều này với POSIX rất khó:
POSIX Sed không hỗ trợ \r
hoặc \15
. Ngay cả khi nó đã làm, tùy chọn tại chỗ -i
không phải là POSIX
POSIX Awk không hỗ trợ \r
và \15
, tuy nhiên-i inplace
tùy chọn không phải là POSIX
d2u và dos2unix không phải là tiện ích POSIX , nhưng ex là
POSIX cũ không hỗ trợ \r
, \15
, \n
hoặ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
Có, sử dụng dos2unix
. Ví dụ:
[justin@mybox ~]$ dos2unix myfile
dos2unix
thường có sẵn, nếu khôngsed -e 's/\r$//'