- Tổng đài 24/7: 1800 646 881
- Đăng nhập
- 3
Trong bài viết này BKHOST sẽ cùng bạn tìm hiểu các thông tin chi tiết liên quan đến các lệnh grep trong hệ thống Linux/ Unix.
Mục đích của bài viết là giúp bạn học được cách sử dụng lệnh grep để tìm kiếm tệp cho văn bản từ thiết bị đầu cuối thông qua các ví dụ.
Lưu ý: Một dòng trên thiết bị đầu cuối không giống với một dòng trong văn bản bình thường. Một dòng ở đây là một chuỗi các ký tự cho đến khi ngắt dòng. Đầu ra của lệnh grep có thể chứa toàn bộ văn bản nếu không có tùy chọn tìm kiếm để chỉnh nội dung đầu ra mong muốn.
Grep được viết tắt từ Global Regular Expression Print.
Grep là một công cụ dòng lệnh Linux/Unix được sử dụng để tìm kiếm một chuỗi ký tự trong một tệp được chỉ định. Mẫu tìm kiếm văn bản được gọi là biểu thức chính quy. Khi tìm thấy một kết quả phù hợp, nó sẽ in dòng kèm theo kết quả. Lệnh grep rất tiện dụng khi tìm kiếm qua các tệp nhật ký lớn.
Dạng cơ bản của lệnh grep được cấu tạo từ ba phần bao gồm: Phần đầu tiên bắt đầu với grep, tiếp theo là mẫu mà bạn đang tìm kiếm, cuối cùng là tên tệp mà grep tìm kiếm.
Cú pháp lệnh grep có cấu trúc đơn giản như sau:
Nếu bạn muốn kết quả trả ra linh hoạt theo nhu cầu của mình, bạn có thể kết hợp với các tùy chọn khác nhau cũng như có thể chứa nhiều biến thể mẫu và tên tệp.
Sau đây là các ví dụ về lệnh grep được sử dụng phổ biến nhất hiện nay:
Lưu ý: Lệnh grep phân biệt chữ hoa chữ thường. Đảm bảo sử dụng đúng trường hợp khi chạy các lệnh grep.
Để in bất kỳ dòng nào từ tệp có chứa một mẫu ký tự cụ thể, trong trường hợp này là từ Phoenix trong tệp sample2, lệnh chạy có cấu trúc như sau:
{{EJS0}}
Grep sẽ hiển thị các dòng có từ trùng khớp với từ Phoenix. Khi thực hiện lệnh này, bạn không nhận được kết quả phù hợp chính xác. Thay vào đó, thiết bị đầu cuối in các dòng có các từ chứa chuỗi ký tự bạn đã nhập. Đây là một ví dụ:
Mẹo: Nếu mẫu tìm kiếm của bạn bao gồm các ký tự không phải là chữ và số, hãy sử dụng dấu ngoặc kép. Có thể bao gồm các khoảng trống hoặc bất kỳ ký hiệu nào.
Để tìm kiếm nhiều tệp bằng lệnh grep, hãy điền tên các tệp bạn muốn tìm kiếm, giữ các tệp được phân cách bằng khoảng trắng.
Ví dụ sau đây là sử dụng lệnh grep để tìm từ Phoenix trong ba tệp sample, sample2 và sample3, nó được thể hiện ở ví dụ sau:
{{EJS1}}
Thiết bị đầu cuối in ra tên của các tệp chứa các dòng phù hợp và các dòng thực bao gồm chuỗi ký tự bắt buộc.
Bạn có thể nối với lượng tệp không giới hạn. Thiết bị đầu cuối in một dòng mới với tên tệp cho mọi kết quả khớp mà nó tìm thấy trong các tệp được liệt kê.
Mẹo: Tham khảo bài viết về Lệnh Xargs để tìm hiểu cách sử dụng xargs với grep giúp tìm kiếm một chuỗi trong danh sách tệp.
Để tìm kiếm tất cả các tệp trong thư mục hiện tại, hãy sử dụng dấu “*” thay vì tên tệp ở cuối lệnh grep.
Trong ví dụ này, nix được sử dụng để làm tiêu chí tìm kiếm:
{{EJS2}}
Đầu ra hiển thị tên của tệp bằng nix và trả về toàn bộ dòng.
Grep chỉ cho phép bạn tìm và in kết quả cho toàn bộ từ. Để tìm kiếm từ Phoenix ở tất cả các tệp trong thư mục hiện tại, hãy thêm -w vào lệnh grep.
{{EJS3}}
Tùy chọn này chỉ in các dòng có kết quả khớp toàn bộ từ và tên của các tệp mà nó tìm thấy trong thư mục:
Khi bỏ -w, grep sẽ hiển thị mẫu tìm kiếm ngay cả khi một từ khác chứa các chuỗi con mà bạn cần tìm kiếm.
Nếu bạn muốn tìm kiếm nhiều chuỗi và mẫu từ, hãy xem bài viết về cách chuyển đổi từ để tìm nhiều chuỗi, mẫu hoặc từ.
Vì các lệnh grep phân biệt chữ hoa chữ thường, một trong những toán tử hữu ích nhất cho tìm kiếm grep là -i. Thay vì chỉ in kết quả bằng chữ thường, thiết bị đầu cuối hiển thị cả kết quả viết hoa và viết thường. Đầu ra bao gồm các dòng có các mục nhập chữ hoa và chữ thường hỗn hợp.
Ví dụ về lệnh này:
{{EJS4}}
Nếu chúng ta sử dụng toán tử -i để tìm kiếm các tệp trong thư mục hiện tại cho Phoenix, kết quả sẽ giống như sau:
Để bao gồm tất cả các thư mục con trong kết quả tìm kiếm được trả về, hãy sử dụng toán tử -r vào lệnh grep.
{{EJS5}}
Lệnh này in các kết quả phù hợp cho tất cả các tệp trong thư mục hiện tại, thư mục con và đường dẫn chính xác với tên tệp. Trong ví dụ trên, có bổ sung thêm toán tử -w để hiển thị toàn bộ các từ, tuy nhiên kết quả đầu ra vẫn tương tự nhau:
Bạn có thể sử dụng grep để in tất cả các dòng không khớp với một mẫu ký tự cụ thể. Để tìm kiếm với kết quả ngược như thế này, hãy thêm -v vào lệnh grep.
Để loại bỏ tất cả các dòng có chứa Phoenix, hãy sử dụng cú pháp sau:
{{EJS6}}
Thiết bị đầu cuối in ra tất cả các dòng không chứa từ Phoenix được sử dụng làm tiêu chí tìm kiếm. Sử dụng thêm -i để loại bỏ cả chữ hoa chữ thường, loại trừ hoàn toàn từ được sử dụng cho tìm kiếm này:
Mặc định lệnh grep sẽ in toàn bộ các dòng chứa kết quả tìm kiếm trùng khớp trong một tệp. Để chỉ in những dòng hoàn toàn khớp với chuỗi tìm kiếm, hãy thêm tùy chọn -x.
{{EJS7}}
Đầu ra sẽ chỉ hiển thị các dòng trùng khớp hoàn toàn. Nếu có bất kỳ từ hoặc ký tự nào khác trong cùng một dòng, grep sẽ không đưa nó vào kết quả tìm kiếm. Khi có khoảng trắng hay ký hiệu trong mẫu tìm kiếm, đừng quên sử dụng thêm dấu “”
Dưới đây là so sánh các kết quả không có và với toán tử -x trong lệnh grep:
Đôi khi, bạn chỉ cần xem tên của các tệp chứa một từ hoặc chuỗi ký tự và loại trừ các dòng không liên quan khác. Để chỉ in các tên tệp phù hợp với tìm kiếm của bạn, hãy sử dụng toán tử -l:
{{EJS8}}
Kết quả hiển thị tên tệp chính xác có chứa Phoenix trong thư mục hiện tại nhưng không in ra các dòng có từ tương ứng:
Hãy sử dụng toán tử tìm kiếm đệ quy -r, nó giúp bao gồm tất cả các thư mục con trong tìm kiếm của bạn.
Grep có thể hiển thị tất cả các tên tệp và số dòng mà nó tìm thấy kết quả phù hợp với từ của bạn.
Sử dụng toán tử -c để đếm số lượng kết quả phù hợp:
{{EJS9}}
Đôi khi bạn cần thêm nội dung trong kết quả tìm kiếm để so sánh xem nội dung nào phù hợp nhất.
Các toán tử sau giúp bạn thêm các dòng mong muốn vào trước, sau hoặc cả hai trong kết quả tìm kiếm:
Khi grep in kết quả với nhiều kết quả trùng khớp, sẽ rất tiện lợi khi xem số dòng bằng cách dùng toán tử -n vào bất kỳ lệnh grep nào để hiển thị số dòng.
Chúng tôi sẽ tìm kiếm Phoenix trong thư mục hiện tại, hiển thị hai dòng trước và sau các kết quả đầu ra cùng với số dòng của chúng.
{{EJS10}}
Một số tệp riêng lẻ sẽ chứa rất nhiều kết quả trùng khớp với yêu cầu của mẫu tìm kiếm. Do đó, để có thể giới hạn số dòng trong đầu ra của grep, bạn có thể thêm tùy chọn -m vào lệnh grep
{{EJS11}}
Trong trường hợp này, thiết bị đầu cuối chỉ in hai kết quả khớp đầu tiên mà nó tìm thấy trong tệp mẫu.
Nếu bạn không chỉ định một tệp cụ thể (như ví dụ là tệp sample) và tìm kiếm tất cả các tệp trong một thư mục, đầu ra sẽ in hai kết quả đầu tiên từ mọi tệp cùng với tên tệp chứa các kết quả phù hợp.
Qua bài viết, bạn đã có thể biết cách sử dụng lệnh grep trong Linux/Unix. Lệnh grep rất linh hoạt với nhiều toán tử và tùy chọn hữu ích. Giúp bạn có thể dễ dàng tìm kiếm những thông tin cần thiết theo yêu cầu mà bạn mong muốn.
Nếu bạn còn muốn tìm hiểu thêm những câu lệnh khác hoặc những mẹo sử dụng Linux, hãy để lại bình luận ở bên dưới, BKHOST sẽ trả lời bạn trong thời gian sớm nhất.
P/s: Bạn cũng có thể truy cập vào Blog của BKHOST để đọc thêm các bài viết chia sẻ kiến thức về lập trình, quản trị mạng, website, domain, hosting, vps, server, email,… Chúc bạn thành công.
Mua Cloud VPS Cao Cấp tại BKHOST
Giảm giá cực sâu, chất lượng hàng đầu. Đăng ký ngay hôm nay: