Bạn có thể sử dụng tr
để chuyển đổi từ DOS sang Unix; tuy nhiên, bạn chỉ có thể thực hiện việc này một cách an toàn nếu CR chỉ xuất hiện trong tệp của bạn dưới dạng byte đầu tiên của cặp byte CRLF. Đây thường là trường hợp. Sau đó, bạn sử dụng:
tr -d '\015' <DOS-file >UNIX-file
Lưu ý rằng tên DOS-file
khác với tên UNIX-file
; nếu bạn cố gắng sử dụng cùng một tên hai lần, bạn sẽ không có dữ liệu trong tệp.
Bạn không thể làm theo cách khác (với tiêu chuẩn 'tr').
Nếu bạn biết cách nhập trở lại vận chuyển vào tập lệnh ( control-V, control-Mđể nhập control-M), thì:
sed 's/^M$//' # DOS to Unix
sed 's/$/^M/' # Unix to DOS
trong đó '^ M' là ký tự control-M. Bạn cũng có thể sử dụng cơ chế bash
trích dẫn ANSI-C để chỉ định trả về vận chuyển:
sed $'s/\r$//' # DOS to Unix
sed $'s/$/\r/' # Unix to DOS
Tuy nhiên, nếu bạn đang đi để có để làm điều này rất thường xuyên (nhiều hơn một lần, khoảng nói), nó còn lâu mới hợp lý hơn để cài đặt các chương trình chuyển đổi (ví dụ dos2unix
và unix2dos
, hoặc có lẽ dtou
và utod
) và sử dụng chúng.
Nếu bạn cần xử lý toàn bộ thư mục và thư mục con, bạn có thể sử dụng zip
:
zip -r -ll zipfile.zip somedir/
unzip zipfile.zip
Điều này sẽ tạo ra một kho lưu trữ zip với các kết thúc dòng được thay đổi từ CRLF thành CR. unzip
sau đó sẽ đặt các tệp đã chuyển đổi trở lại vị trí (và yêu cầu bạn gửi tệp theo tệp - bạn có thể trả lời: Có-tất cả). Tín dụng cho @vmsnomad để chỉ ra điều này.
dos2unix
bằng trình quản lý gói của bạn, nó thực sự đơn giản hơn nhiều và tồn tại trên hầu hết các nền tảng.