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
0Chú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
1Bâ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
2Chú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
3Lệ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