grep cho một chuỗi ký tự chữ và số có độ dài bất kỳ với dấu hai chấm ở mỗi bên


14

Làm thế nào bạn có thể grep cho một chuỗi ký tự chữ và số từ 1 đến 50 ký tự (lý tưởng là độ dài bất kỳ cũng sẽ hoạt động) với dấu hai chấm ở mỗi bên - một kết quả điển hình sẽ là tất cả các dòng có chứa chuỗi :shopping:. Cho đến nay tôi đã có mã bên dưới (Tôi đã thử một số biến thể về nó) không hoạt động:

grep ':[[:alnum:]]{1,100}:' ~/x.txt

Bạn chỉ cần kích hoạt các khả năng regex mở rộng grepbằng cách bao gồm cả công -Etắc.
slm

Câu trả lời:


13

Bạn cần kích hoạt các biểu thức chính quy mở rộng cho việc này:

grep -E ':[[:alnum:]]+:' ~/x.txt

4

Với các biểu thức chính quy cơ bản, bạn có thể viết nó như sau:

grep ':[[:alnum:]]\{1,100\}:' ~/x.txt

Lưu ý rằng \{(trái ngược với \+hoặc \?ví dụ) là tiêu chuẩn và di động, và trên thực tế các tương đương BRE của +?thường được viết bằng \{: \{1,\}\{0,1\}. grep -Ecũng là tiêu chuẩn và di động, vì vậy bạn cũng có thể sử dụng nó vì nó làm cho các biểu thức chính dễ đọc hơn trong những trường hợp đó.


1

Bạn đang sử dụng một biểu hiện thường xuyên mở rộng, do đó bạn cần sử dụng tùy chọn -E:

grep -E ':[[:alnum:]]{1,100}:' ~/x.txt

cảm ơn! Tôi đặt câu trả lời khác là chính xác vì tôi đã không viết kịch bản "lý tưởng" của mình vào tiêu đề và tôi không muốn khiến những người google trả lời sao chép dán câu trả lời sai, nhưng tôi sẽ sử dụng câu trả lời của bạn. :)

1
@TorThommesen - bạn có thể chỉnh sửa tiêu đề của Q nếu không đúng.
slm

0

Vì không ai khác đề cập đến nó, bạn cũng có thể sử dụng egrep, mà theo tôi hiểu, nó tương đương với grep -E.

egrep ':[[:alnum:]]{1,100}:' ~/x.txt

1
egreplà lệnh lịch sử để grep với EREs. Chức năng của grep và egrep kể từ đó (từ lâu) đã được hợp nhất thành grep với tùy chọn -E. egrepbây giờ được coi là lỗi thời / không dùng nữa (nhưng không thể đi vì một số người vẫn quen với nó).
Stéphane Chazelas
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.