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:
Ví dụ:
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:
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.
Sử dụng tùy chọn dòng lệnh -A để in 'N' dòng sau dòng khớp.
Ví dụ:
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.
Ví dụ:
Đâ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.
Ví dụ:
Đây là đầu ra đã ghi lại:
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.
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.
Ví dụ:
Đây là đầu ra:
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]
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.)
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]
Mã:
$ grep -A 2 "linux" test_file1.txt
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]
Mã:
$ grep -B 2 "linux" test_file1.txt
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]
Mã:
$ grep -C 2 "linux" test_file1.txt
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]
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]
Mã:
$ grep -o -b "for" test_file1.txt