tôi không thể nhận grep
để trường hợp nhạy cảm tìm kiếm với mô hình nàygrep case sensitive [A-Z]?
$ grep 'T[A-Z]' test.txt
The Quick Brown Fox Jumps Over The Lazy Dog
THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG
tôi không thể nhận grep
để trường hợp nhạy cảm tìm kiếm với mô hình nàygrep case sensitive [A-Z]?
$ grep 'T[A-Z]' test.txt
The Quick Brown Fox Jumps Over The Lazy Dog
THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG
Sử dụng dấu ngoặc kép để ngăn chặn các mô hình không bị xuất hiện như một glob để tệp (s) trong hệ thống tập tin của trình bao. ''
Sử dụng lớp nhân vật được đặt tên để đảm bảo khớp trùng chữ thường. [[:lower:]]
Sử dụng trình định lượng để tạo kết quả phù hợp cho nhiều hơn một ký tự. \+
Sử dụng (các) neo để đảm bảo khớp được định vị chính xác. ^
grep '^T[[:upper:]]\+' test.txt
Lý do mà [A-Z]
không làm việc cho bạn là cách miền địa phương bạn đang sử dụng được thực hiện trên hệ thống của bạn, mô hình đó cũng bao gồm chữ thường.
@svnpenn: Xem [this] (http://unix.stackexchange.com/questions/15980/does-should-lc-collate-affect-character-ranges) và [this] (http: //unix.stackexchange. com/questions/19322/tại sao-là-capital-letters-bao gồm-in-a-range-of-lower-case-chữ-trong-một-awk-rege) cho một cuộc thảo luận về các vấn đề. –
Bạn có thể thiết lập giá trị LANG:
$ LANG=C grep 'T[A-Z]' test.txt
THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG
grep 'T[[:upper:]]' test.txt
grep 'T[ABCDEFGHIJKLMNOPQRSTUVWXYZ]' test.txt
Điều này có vẻ là một lỗi trong ít nhất một số phiên bản 'grep'; khi bạn sử dụng một loạt các chữ cái trong regex của mình, tìm kiếm trong trường hợp không nhạy cảm với tất cả các chữ cái nhưng là chữ cái đầu tiên trong phạm vi. Ví dụ. 'echo 's' | grep '[S-T]' 'không tạo ra bất kỳ đầu ra nào, trong khi' echo 't' | grep '[S-T]' 'kết quả đầu ra' t'. Mặt khác, 'echo 't' | grep -o '[S-T]' 'không xuất ra bất cứ thứ gì, điều này hơi khó hiểu. Sử dụng '[[: upper:]]' thay vào đó dường như giải quyết vấn đề này cho trường hợp khi phạm vi là '[A-Z]'. – HelloGoodbye