grep
Ý tưởng của một nhân vật phụ thuộc vào địa phương . Nếu bạn đang ở một địa điểm không phải là Unicode và bạn grep từ một tệp có các ký tự Unicode trong đó thì số ký tự sẽ không khớp. Nếu echo $LANG
sau đó bạn sẽ thấy miền địa phương bạn đang ở.
Nếu bạn đặt biến LC_CTYPE
và / hoặc LANG
biến môi trường thành giá trị kết thúc bằng ".UTF-8" thì bạn sẽ có hành vi đúng:
$ cat data
étuis
letter
éééééé
$ LANG=C grep -E '^.{6}$' data
étuis
letter
$ LANG=en_US.UTF_8 grep -E '^.{6}$' data
letter
éééééé
$
Bạn có thể thay đổi ngôn ngữ của mình chỉ bằng một lệnh bằng cách gán biến trên cùng dòng với lệnh.
Với cấu hình này, các ký tự nhiều byte được coi là các ký tự đơn. Nếu bạn muốn loại trừ hoàn toàn các ký tự không phải ASCII, một số câu trả lời khác có giải pháp cho bạn.
Lưu ý rằng mọi thứ vẫn có thể bị phá vỡ, hoặc ít nhất là không làm chính xác những gì bạn mong đợi, với sự có mặt của các nhân vật kết hợp . Bạn grep
có thể đối xử với LATIN SMALL LETTER E + COMBINING CHARACTER ACUTE TRÊN khác với LATIN SMALL LETTER E VỚI ACUTE.
.
, một cái gì đó giống nhưwăsd's
sẽ khớp