Nếu một tệp có các kết thúc dòng CR-LF kiểu DOS / Windows, thì nếu bạn xem nó bằng công cụ dựa trên Unix, bạn sẽ thấy các ký tự CR ('\ r') ở cuối mỗi dòng.
Lệnh này:
grep -l '^M$' filename
sẽ in filename
nếu tệp chứa một hoặc nhiều dòng có kết thúc dòng kiểu Windows và sẽ không in gì nếu không có. Ngoại trừ việc ^M
phải là một ký tự trở lại vận chuyển theo nghĩa đen, thường được nhập vào thiết bị đầu cuối bằng cách gõ Ctrl+ Vtheo sau Enter
(hoặc Ctrl+ Vvà sau đó Ctrl+ M). Shell bash cho phép bạn viết trở lại vận chuyển theo nghĩa đen như $'\r'
( tài liệu ở đây ), vì vậy bạn có thể viết:
grep -l $'\r$' filename
Các vỏ khác có thể cung cấp một tính năng tương tự.
Bạn có thể sử dụng một công cụ khác thay thế:
awk '/\r$/ { exit(1) }' filename
Điều này sẽ thoát với trạng thái 1
(cài đặt $?
thành 1
) nếu tệp chứa bất kỳ kết thúc dòng kiểu Windows nào và với trạng thái 0
nếu không, làm cho nó hữu ích trong if
câu lệnh shell (lưu ý thiếu [
dấu ngoặc ]
):
if awk '/\r$/ { exit(1) }' filename ; then
echo filename has Unix-style line endings
else
echo filename has at least one Windows-style line ending
fi
Một tệp có thể chứa hỗn hợp các kết thúc dòng kiểu Unix và Windows. Tôi giả sử ở đây rằng bạn muốn phát hiện các tệp có bất kỳ kết thúc dòng kiểu Windows nào .