2013-02-22 12 views
5

Tôi đang cố gắng thao tác một tệp văn bản và xóa các ký tự không phải ASCII khỏi văn bản. Tôi không muốn loại bỏ dòng. Tôi chỉ muốn xóa các ký tự vi phạm. Tôi cố gắng để có được các biểu thức sau đây để làm việc:Cố gắng xóa các ký tự không phải ASCII chỉ

sed '/[\x80-\xFF]/d'

+1

Xem câu trả lời [this] (http://stackoverflow.com/questions/3337936/remove-non-ascii-characters-cs-csv). – speakr

+1

Chủ đề này có thể có câu trả lời bạn đang tìm kiếm http://stackoverflow.com/questions/8571601/skip-remove-non-ascii-character-with-sed – Ifthikhan

+0

Lệnh của bạn sẽ xóa tất cả các dòng chứa ký tự không phải ascii. Nếu đó không phải là những gì bạn muốn, hãy kiểm tra các câu hỏi trùng lặp –

Trả lời

33

Các giải pháp đề nghị có thể thất bại với phiên bản cụ thể của sed, ví dụ GNU sed 4.2.1.

Sử dụng tr:

tr -cd '[:print:]' < yourfile.txt 

này sẽ loại bỏ bất kỳ ký tự không [\x20-\x7e].

Nếu bạn muốn giữ ví dụ: nguồn cấp dữ liệu dòng, chỉ cần thêm \n:

tr -cd '[:print:]\n' < yourfile.txt 

Nếu bạn thực sự muốn giữ lại tất cả ký tự ASCII (ngay cả các mã điều khiển):

tr -cd '[:print:][:cntrl:]' < yourfile.txt 

này sẽ loại bỏ bất kỳ ký tự không [\x00-\x7f].

+1

Hey speakr, là có một cách để bảo tồn các định dạng của tập tin văn bản. Lệnh tr cung cấp tất cả mọi thứ vào một dòng liên tục phải không? –

+1

@bosra: Tôi đã thêm một ví dụ để duy trì nguồn cấp dữ liệu dòng. – speakr

+0

Man, nếu tôi có thể upvote này một vài lần nữa tôi sẽ .. Cảm ơn –