Làm thế nào để bạn tìm thấy các ký tự không phải ascii trong python?

Các ký tự không phải ASCII là những ký tự không được mã hóa bằng ASCII, chẳng hạn như Unicode, EBCDIC, v.v. ASCII được giới hạn ở 128 ký tự và ban đầu được phát triển cho ngôn ngữ tiếng Anh

Trong hướng dẫn này, chúng ta sẽ xem xét một số công cụ để tìm và đánh dấu các ký tự không phải ASCII trong tệp văn bản

2. Cài đặt

Hãy tạo một tệp mẫu. txt có nhiều dòng và ký tự không phải ASCII trong một số dòng

$ cat >> sample.txt

This is an article on finding non-ASCII characters on Baeldung
日本人 中國的 ~=[][]%+{}@;’#!$_&-  éè  ;∞¥₤€
We hopè you find it [email protected]€
Thank You!

Chúng tôi sẽ sử dụng tệp này làm tệp mẫu trong suốt hướng dẫn

3. sử dụng grep

grep là viết tắt của in biểu thức chính quy toàn cầu. Nó tìm kiếm các mẫu ký tự cụ thể trong đầu vào và xuất ra tất cả các dòng khớp

Lệnh grep có các biến thể khác nhau. Nó có sẵn trên hầu hết mọi hệ thống phân phối Linux theo mặc định. Ở đây, chúng ta sẽ tập trung vào GNU grep được sử dụng rộng rãi nhất

Chúng ta có thể sử dụng lệnh này để tìm tất cả các ký tự không phải ASCII

$ grep --color='auto' -P -n "[\x80-\xFF]" sample.txt

Bây giờ, hãy hiểu lệnh này bằng cách chia nhỏ nó

  • –color=’tự động’. chỉ định khi nào các phần của mẫu phù hợp sẽ được tô màu. Giá trị 'tự động' làm nổi bật các chuỗi phù hợp nếu đầu ra được ghi trực tiếp vào thiết bị đầu cuối. Các tùy chọn khác bao gồm 'luôn luôn', 'không bao giờ', 'tty', v.v.
  • -P. diễn giải các mẫu dưới dạng biểu thức chính quy tương thích với Perl
  • -N. hiển thị mỗi dòng phù hợp với một số dòng
  • “[\x80-\xFF]”. biểu thức chính quy khớp với các ký tự không nằm trong phạm vi ASCII

Tùy thuộc vào cài đặt hệ thống của chúng tôi, lệnh trên có thể không hoạt động. Nó sẽ chỉ hiển thị một số ký tự không phải ASCII. Một cách khác là grep nghịch đảo của lệnh này, hoạt động hiệu quả hơn

$ grep --color='auto' -P -n "[^\x00-\x7F]" sample.txt

Hoặc, chúng ta có thể grep nghịch đảo bằng cách sử dụng các lớp ký tự

$ grep --color='auto' -n "[^[:ascii:]]" sample.txt

Đây là phản hồi chúng tôi nhận được
[email protected]€

Theo mặc định, lệnh trên chỉ hiển thị các dòng chứa các ký tự không phải ASCII

Hãy chia nhỏ lệnh để hiểu nó

  • -ne. hai cờ kết hợp [-n và -e] tạo một dòng mới và thực hiện lệnh in tương ứng
  • 'in nếu ...'. một chương trình nhỏ in tất cả các ký tự không phải ASCII
  • /[^[. ascii]]/. biểu thức chính quy khớp với bất kỳ ký tự không phải ASCII nào

6. sử dụng tr

Chúng ta có thể sử dụng lệnh tr hoặc dịch để dịch hoặc xóa các ký tự cụ thể. Nó được cài đặt sẵn trong tất cả các bản phân phối Linux chính

tr cho phép chúng tôi thực hiện chuyển đổi văn bản chẳng hạn như chữ hoa thành chữ thường, xóa các mẫu ký tự cụ thể, v.v.

Hãy sử dụng nó để xóa tất cả các ký tự ASCII trong tệp mẫu của chúng tôi

$ grep --color='auto' -P -n "[\x80-\xFF]" sample.txt
0

Chúng tôi đã sử dụng cờ -d để xóa tất cả các ký tự ASCII. Chúng tôi cũng đã sử dụng [. in. ]’ để khớp với tất cả các ký tự ASCII có thể in được

Lệnh trên xóa tất cả các ký tự ASCII hiện tại. Nó chỉ in các ký tự không phải ASCII không bị xóa

7. sử dụng sed

sed được sử dụng để thực hiện các chức năng khác nhau như tìm kiếm, tìm và thay thế, v.v. trên tập tin. Nó cho phép chúng tôi chỉnh sửa tệp nhanh chóng từ dòng lệnh mà không cần mở chúng

Hãy tìm tất cả các ký tự không phải ASCII bằng cách sử dụng sed

$ grep --color='auto' -P -n "[\x80-\xFF]" sample.txt
1

Bây giờ, hãy hiểu từng phần của lệnh

  • LC_ALL=C. biến môi trường ghi đè tất cả các cài đặt bản địa hóa khác. Ở đây, chúng tôi đã đặt nó thành cài đặt C đơn giản nhất
  • -tôi. được sử dụng để chỉnh sửa tệp tại chỗ mà không cần mở tệp
  • 's/[^\…'. biểu thức chính quy khớp với tất cả các ký tự không phải ASCII

Lệnh trên chỉnh sửa tệp đầu vào ban đầu của chúng tôi. Nên tạo một bản sao của tệp đầu vào trước khi chạy lệnh

Theo mặc định, lệnh trên sẽ không hiển thị bất kỳ đầu ra nào. Chúng ta có thể sử dụng lệnh cat để kiểm tra các thay đổi

$ grep --color='auto' -P -n "[\x80-\xFF]" sample.txt
2

Chúng ta cũng có thể sử dụng lệnh sed này để đánh dấu các ký tự không phải ASCII

$ grep --color='auto' -P -n "[\x80-\xFF]" sample.txt
3

Lệnh này thay thế mọi lần xuất hiện của ký tự không phải ASCII bằng giá trị bát phân của nó

8. Phần kết luận

Trong bài viết này, chúng ta đã tìm hiểu về các ký tự không phải ASCII. Chúng tôi cũng đã thảo luận về các công cụ khác nhau mà chúng tôi có thể sử dụng để tìm các ký tự không phải ASCII trong tệp văn bản

tác giả dưới cùng

Nếu bạn có một vài năm kinh nghiệm trong hệ sinh thái Linux và bạn muốn chia sẻ trải nghiệm đó với cộng đồng, hãy xem Nguyên tắc đóng góp của chúng tôi

Chủ Đề