Hầu hết các giải pháp trên trang này không hoạt động đối với tôi (FreeBSD 10.3 amd64). giải pháp OSX Ian Will làm gần như luôn luôn làm việc, nhưng là khá khó theo dõi: - (
Có một giải pháp dễ dàng mà hầu-luôn luôn làm việc quá: (nếu $ f là tập tin):
sed -i '' -e '$ a \' "$ f"
có một vấn đề lớn với các giải pháp sed:. nó không bao giờ mang đến cho bạn cơ hội để chỉ cần kiểm tra (và không thêm một dòng mới)
Cả hai giải pháp trên đều thất bại đối với các tệp DOS. Tôi cho rằng giải pháp di động/scriptable nhất có thể là ably là đơn giản nhất, mà tôi đã tự phát triển bản thân mình: -)
Đây là tập lệnh sh sơ cấp kết hợp tệp/unix2dos/đuôi. Trong sản xuất, bạn có thể sẽ cần phải sử dụng "$ f" trong dấu ngoặc kép và lấy đuôi ra (nhúng vào biến vỏ tên cuối cùng) là \ "$ f \"
if file $f | grep 'ASCII text' > /dev/null; then
if file $f | grep 'CRLF' > /dev/null; then
type unix2dos > /dev/null || exit 1
dos2unix $f
last="`tail -c1 $f`"
[ -n "$last" ] && echo >> $f
unix2dos $f
else
last="`tail -c1 $f`"
[ -n "$last" ] && echo >> $f
fi
fi
Hope this helps một ai đó.
Nguồn
2017-07-31 00:44:45
Bạn có đang tìm kiếm một màn hình rộng các tệp tạo thành một thư mục không? Câu hỏi của bạn không rõ ràng bằng ví dụ trên .. – James
"txt bình thường" có nghĩa là gì? Bạn đang nói về các tệp kết thúc bằng một dòng * trống * (\ n \ n) hoặc chỉ các tệp kết thúc bằng một dòng mới? Bạn có thể sử dụng 'od -c filename' để in đại diện rõ ràng của tập tin. – jfs
Chỉ cần nhấn mạnh: dòng mới là * không * giống như dòng * trống *. Một dòng mới là một ký tự đơn - nó phân định những gì chúng ta thấy là "dòng". Một dòng trống chỉ đơn giản là một "dòng" không có ký tự, thường là 2 ký tự dòng mới liên tiếp không có gì ở giữa hoặc dòng đầu tiên trong tệp bắt đầu bằng dòng mới. Một số người gọi đường dây chỉ bao gồm khoảng trắng "khoảng trắng" và đặt cụm từ "dòng trống" cho 2 ký tự dòng mới liên tiếp. Bạn nên rõ ràng về những gì bạn muốn. – jw013