Tại sao mèo dòng lệnh khác với BBEdit?


0

Trong ngành công nghiệp phim, thông thường có các tệp âm thanh WAV chứa siêu dữ liệu trong đoạn RIFF iXML. Một cách dễ dàng để đọc siêu dữ liệu này là mở tệp WAV trong trình soạn thảo văn bản, như BBEdit hoặc Notepad ++ hoặc thậm chí là TextEdit. Nhưng với dòng lệnh cathoặc tailnó không hoạt động, tôi chỉ thấy các ký tự rác. Tôi đang sử dụng macOS 10.13 nếu có vấn đề. Tại sao catkhác với các ứng dụng chỉnh sửa văn bản này?

Đây là một tệp mẫu, với iXML hoàn toàn ở phía dưới: http://www.gallery.co.uk/ixml/examples/usesEntireiXMLSpec.WAV


Đó là một tệp nhị phân. Sử dụng strings usesEntireiXMLSpec.WAVđể trích xuất các chuỗi văn bản.
DavidPostill

Câu trả lời:


2

Khi catxuất tệp, nó xuất ra byte theo từng byte mà không thay thế khoảng trắng hoặc dấu chấm hoặc một số loại ký tự thay thế khác. Vì vậy, khi nó xuất dữ liệu mẫu âm thanh nhị phân sớm hơn trong tệp .WAV, một số byte đó xảy ra khớp với mã điều khiển đầu cuối trường cũ và "chuỗi thoát" (chuỗi byte bắt đầu bằng ký tự "ESC", có thể là Được sử dụng để làm những việc như thay đổi văn bản hoặc màu nền, xóa màn hình đầu cuối và định vị lại con trỏ trong màn hình đầu cuối). Trình giả lập thiết bị đầu cuối của bạn (Terminal.app hoặc iTerm2 hoặc bất cứ điều gì) cố gắng tôn vinh các mã điều khiển và các chuỗi thoát đó, loại bỏ cách nó thường hiển thị văn bản và thực hiện theo cách không thể đoán trước.

Rất nhiều công cụ dựa trên thiết bị đầu cuối có các tùy chọn cho phép bạn xử lý các tệp có một số dữ liệu nhị phân trộn lẫn với văn bản ASCII có thể in thuần túy. Ví dụ, catcó một -vtùy chọn để làm cho nó thay thế các chuỗi có thể in thay cho các ký tự điều khiển ASCII. Ngoài ra còn có vis(1), od(1), hexdump(1), strings(1)và những người khác. Bạn cũng có thể sử dụng các công cụ như sed(1), grep(1)awk(1)để cố gắng trích xuất dữ liệu XML ASCII từ giữa dữ liệu nhị phân trong tệp.

Trong số các lựa chọn này, tôi nghĩ strings(1)có thể hứa hẹn nhất cho bạn. Nó quét qua tệp tìm kiếm các chuỗi (chuỗi) ký tự ASCII có thể in được kéo dài từ trung bình đến dài và tự động xuất ra bất kỳ chuỗi nào như vậy tìm thấy. Vì XML hoàn toàn có thể in ASCII, strings(1)nên in tất cả ra trong khi bỏ qua tất cả dữ liệu âm thanh nhị phân.


Thật. Xem bình luận tôi chỉ cần thêm vào câu hỏi. Bằng cách giải thích tốt bằng cách này.
DavidPostill
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.