Tôi có một tệp văn bản utf-8 lớn mà tôi thường tìm kiếm grep
. Gần đây grep
đã bắt đầu báo cáo rằng đó là một tập tin nhị phân. Tôi có thể tiếp tục tìm kiếm nó grep -a
, nhưng tôi đã tự hỏi sự thay đổi nào đã khiến nó quyết định rằng tập tin bây giờ là nhị phân.
Tôi có một bản sao từ tháng trước khi tệp không còn được phát hiện dưới dạng nhị phân, nhưng nó không thực tế đối với diff
chúng vì chúng khác nhau trên> 20.000 dòng.
file
xác định tập tin của tôi là
Văn bản tiếng Anh UTF-8 Unicode, với các dòng rất dài
Làm thế nào tôi có thể tìm thấy các ký tự / dòng / vv. trong tập tin của tôi đang kích hoạt sự thay đổi này?
Câu hỏi tương tự, không trùng lặp 19907 bao gồm khả năng của NUL nhưng grep -Pc '[\x00-\x1F]'
nói rằng tôi không có NUL hoặc bất kỳ chaarcters kiểm soát ANSI nào khác.
nul
và một số Esc
s. Tôi đã thử grepping cho họ. Tôi có thể tìm thấy esc
s ( \x1B
), nhưng nul
không bao giờ xuất hiện. Thử nghiệm được đưa ra ở trên cho thấy 1, đối với dòng chứa Esc
s, nhưng không có gì cho bất kỳ phạm vi nào không chứa \x1B
. Tôi sẽ không tin tưởng vào bài kiểm tra đó. grep -zc .
Thay vào đó hãy thử (nên nhiều hơn số nul
s trong tệp của bạn). (Ngoài ra, bạn có thể sử dụng tốt hơn [[:cntrl:]]
.)
sed -z 's/.*\(....\)$/\1/' foo | od -c
để xem một vài ký tự trước NUL
(nếu có), điều này có thể dẫn bạn đến vấn đề.
sed
không có -z
tùy chọn : sed: invalid option -- 'z'
.