Cách thực hiện tìm kiếm mẫu trong các tệp bằng Grep

theanh

Administrator
Nhân viên
Trong bài viết đầu tiên về lệnh grep, chúng tôi đã đề cập đến một số tính năng mà công cụ này cung cấp, bao gồm cách bạn có thể sử dụng công cụ này để chỉ tìm kiếm các từ, tìm kiếm hai từ, đếm các dòng chứa từ khớp, v.v. Bên cạnh những tính năng này, công cụ này còn cung cấp một số tính năng dễ hiểu và hữu ích hơn. Trong bài viết này, chúng tôi sẽ thảo luận về một số tính năng đó.

Xin lưu ý rằng tất cả các ví dụ được đề cập trong hướng dẫn này đều đã được thử nghiệm trên Ubuntu 14.04LTS. Ngoài ra, chúng ta sẽ sử dụng tệp sau (test_file1.txt) cho tất cả các ví dụ liên quan đến grep trong hướng dẫn này:


Tìm kiếm không phân biệt chữ hoa chữ thường với Grep​

Theo mặc định, grep phân biệt chữ hoa chữ thường, nghĩa là, ví dụ, nó sẽ xử lý 'ABC' và 'abc' riêng biệt. Tuy nhiên, nếu bạn muốn tìm kiếm không phân biệt chữ hoa chữ thường, bạn có thể sử dụng tùy chọn dòng lệnh -i.
Mã:
grep -i [string-to-be-searched] [filename]
Ví dụ:
Mã:
grep -i "linux" test_file1.txt


Lưu ý: Không chỉ mẫu (ví dụ, 'linux' trong ví dụ trên), trang hướng dẫn grep còn cho biết tùy chọn -i cũng đảm bảo rằng phân biệt chữ hoa chữ thường đối với các tệp đầu vào cũng bị bỏ qua. Sau đây là đoạn trích:
Mã:
-i, --ignore-case
 Bỏ qua sự phân biệt chữ hoa chữ thường trong cả tệp PATTERN và tệp đầu vào. (-i được chỉ định bởi POSIX.)
Tuy nhiên, chúng tôi không thể tái tạo hành vi liên quan đến tệp đầu vào ở phía chúng tôi.

Hiển thị một số dòng không khớp với dòng chứa chuỗi khớp trong Grep​

Khi sử dụng công cụ này, bạn cũng có thể hiển thị số dòng được chỉ định sau, trước hoặc xung quanh dòng chứa chuỗi khớp.

Sử dụng tùy chọn dòng lệnh -A để in 'N' dòng sau dòng khớp.
Mã:
$ grep -A N [string-to-be-searched] [filename]
Ví dụ:
Mã:
$ grep -A 2 "linux" test_file1.txt
Sau đây là đầu ra của lệnh trên



Tương tự, tùy chọn dòng lệnh -B là được sử dụng để hiển thị các dòng trước dòng khớp.
Mã:
$ grep -B N [string-to-be-searched] [filename]
Ví dụ:
Mã:
$ grep -B 2 "linux" test_file1.txt
Đây là đầu ra:



Cuối cùng, để in các dòng xung quanh dòng khớp, hãy sử dụng tùy chọn dòng lệnh -C.
Mã:
$ grep -C N [string-to-be-searched] [filename]
Ví dụ:
Mã:
$ grep -C 2 "linux" test_file1.txt
Đây là đầu ra đã ghi lại:


Chỉ in các chuỗi khớp trong Grep​

Bạn cũng được phép chỉ in chuỗi khớp trên đầu ra chuẩn (thay vì toàn bộ dòng được hiển thị theo mặc định). Tính năng này có thể được truy cập bằng tùy chọn dòng lệnh -o.
Mã:
$ grep -o [string-to-be-searched] [filename]
Ví dụ, nếu yêu cầu là tìm kiếm một chuỗi "linux" trong một tệp (nhưng không nên in toàn bộ các dòng), thì chúng ta sẽ sử dụng lệnh sau.
Mã:
$ grep -o "linux" [file-name]


Chúng ta cũng có thể sử dụng các ký tự đại diện như * và .* để grep nhiều hơn một chuỗi. Ví dụ, nếu chúng ta muốn grep một nhóm từ bắt đầu từ "how" và kết thúc tại "linux", thì chúng ta có thể sử dụng lệnh sau.
Mã:
$ grep -o “how.*linux” [file-name]

Hiển thị vị trí trong Grep​

Lệnh grep cũng cho phép bạn hiển thị độ lệch byte của dòng mà chuỗi khớp xuất hiện. Có thể truy cập tính năng này bằng tùy chọn dòng lệnh -b. Nhưng để sử dụng tốt hơn tùy chọn này, bạn có thể sử dụng nó với tùy chọn dòng lệnh -o, tùy chọn này sẽ hiển thị vị trí chính xác của chuỗi khớp.
Mã:
$ grep -o -b [string-to-be-searched] [filename]
Ví dụ:
Mã:
$ grep -o -b "for" test_file1.txt
Đây là đầu ra:




Kết luận​

Bạn có thể không cần tất cả các tùy chọn này mỗi ngày, nhưng ít nhất bạn nên biết về chúng vì bạn không bao giờ biết khi nào chúng có thể hữu ích. Grep trở nên mạnh mẽ hơn khi sử dụng với biểu thức chính quy, nhưng chúng ta sẽ để dành chủ đề đó cho một ngày khác.
 
Back
Bên trên