Lệnh grep cung cấp quyền truy cập vào tiện ích grep, một công cụ xử lý file mạnh mẽ được sử dụng để tìm các mẫu trong file văn bản. Lệnh này có nhiều trường hợp sử dụng thực tế và chắc chắn là một trong những lệnh Linux được sử dụng nhiều nhất. Hướng dẫn này minh họa một số lệnh grep Linux đơn giản nhưng hữu ích được sử dụng trong thực tế.

File ví dụ dùng cho việc minh họa

Bài viết đã tạo một file tham khảo để giúp người đọc hiểu về grep hiệu quả hơn. Bạn có thể tạo một bản sao của file này bằng cách đưa ra lệnh shell sau trong Terminal.

cat <<END >> test-file
This is a simple text file that contains
multiple strings as well as some telephone numbers
(555) 555-1234 (567) 666-2345
and email plus web addresses
john@doe.com
https://google.com
ftp://mywebserver.com
END

1. Tìm văn bản trong file

Để tìm kiếm mẫu văn bản trong file, chỉ cần chạy grep theo sau là tên mẫu. Ngoài ra, hãy chỉ định tên của file chứa văn bản.

grep "email" test-file

Lệnh này sẽ hiển thị dòng trong test-file có chứa từ email. Bạn cũng có thể tìm kiếm cùng một văn bản trong nhiều file bằng grep.

grep "example" /usr/share/dict/american-english /usr/share/dict/british-english

Lệnh trên hiển thị tất cả mọi trường hợp của từ example trong các file từ điển american-english và british-english.

2. Tìm các từ khớp hoàn toàn

Lệnh grep của Linux được minh họa trong ví dụ trước đó cũng liệt kê các dòng có khớp một phần. Sử dụng lệnh dưới đây nếu bạn chỉ cần sự xuất hiện của một từ khớp hoàn toàn.

grep -w "string" test-file

Tùy chọn -w hoặc –word-regexp của grep chỉ giới hạn đầu ra đối với các kết quả khớp hoàn toàn. Grep bao gồm một số flag bổ sung có thể được sử dụng với lệnh mặc định.

3. Bỏ qua phân biệt chữ hoa, chữ thường

Theo mặc định, grep tìm kiếm các mẫu có phân biệt chữ hoa chữ thường. Tuy nhiên, bạn có thể muốn tắt tính năng này nếu không biết trước mẫu đó thuộc trường hợp nào.

grep -i "this" test-file

Sử dụng tùy chọn -i hoặc –ignore-case để tắt tính năng phân biệt chữ hoa chữ thường.

4. Đếm số lượng mẫu

Flag -c là viết tắt của count. Nó hiển thị số lượng kết quả phù hợp đã được tìm thấy cho một mẫu cụ thể. Quản trị viên có thể sử dụng điều này để truy xuất thông tin cụ thể về hệ thống.

Bạn có thể pipe lệnh ps với grep để đếm các tiến trình thuộc về người dùng hiện tại.

ps -ef | grep -c $USER

Lệnh sau đây hiển thị số lượng file MP3 có trong một thư mục.

ls ~/Music | grep -c .mp3

5. Hiển thị số dòng chứa các kết quả khớp

Bạn có thể muốn tìm số dòng chứa một kết quả khớp nhất định. Sử dụng tùy chọn -n hoặc –line-number của grep để đạt được điều này.

cat /etc/passwd | grep -n rubaiat

Tùy chọn này đặc biệt hữu ích để gỡ lỗi mã nguồn và khắc phục sự cố file nhật ký. Để hiển thị tất cả số cho các dòng trong ~/.vimrc được sử dụng để cấu hình trình soạn thảo văn bản Vim:

grep -n "set" ~/.vimrc

6. Tìm tên file bằng tiện ích mở rộng

Để có danh sách tất cả các file MP3 trong thư mục ~/Music:

ls ~/Music/ | grep ".mp3"

Bạn có thể thay thế .mp3 bằng bất kỳ phần mở rộng nào khác để định vị các file cụ thể. Lệnh sau liệt kê tất cả các file php có trong thư mục hiện hành.

ls | grep ".php"

7. Tìm mẫu trong file nén

Lệnh grep của Linux cũng có thể tìm thấy các mẫu bên trong file nén. Tuy nhiên, bạn sẽ cần sử dụng lệnh zgrep để thực hiện việc này. Trước tiên, hãy tạo một kho lưu trữ nén của test-file bằng cách nhập:

gzip test-file

Bây giờ, bạn có thể tìm kiếm văn bản hoặc các mẫu khác bên trong kho lưu trữ kết quả.

zgrep email test-file.gz

8. Tìm địa chỉ email

Quản trị viên cũng có thể liệt kê các địa chỉ email từ những file văn bản bằng lệnh grep Linux. Ví dụ sau thực hiện điều này bằng cách tìm kiếm một mẫu biểu thức chính quy (regular expression).

grep '^[a-zA-Z0-9]\+@[a-zA-Z0-9]\+\.[a-z]\{2,\}' test-file

Bạn có thể tìm thấy các biểu thức chính quy để thực hiện những công việc tương tự hoặc tự tạo nếu bạn biết cách chúng hoạt động.

9. Tìm số điện thoại bằng Grep

Bạn có thể sử dụng biểu thức chính quy grep để lọc số điện thoại từ file văn bản. Lưu ý rằng bạn phải điều chỉnh mẫu để phù hợp với loại số điện thoại bạn cần.

grep '\(([0-9]\{3\})\|[0-9]\{3\}\)[ -]\?[0-9]\{3\}[ -]\?[0-9]\{4\}' test-file

Lệnh nói trên lọc ra các số điện thoại Mỹ gồm 10 chữ số.

10. Tìm URL từ file nguồn

Bạn có thể tận dụng sức mạnh của grep để liệt kê các URL được tìm thấy trong file văn bản. Lệnh dưới đây sẽ in tất cả các URL có trong test-file.

grep -E "^(http|https|ftp):[\/]{2}([a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,4})" test-file

Ví dụ sẽ lại sử dụng tùy chọn -E cho các biểu thức chính quy mở rộng. Bạn cũng có thể sử dụng lệnh egrep để tránh thêm điều này.

egrep "^(http|https|ftp):[\/]{2}([a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,4})" test-file

Trên đây là một số ví dụ thực tiễn về cách sử dụng lệnh grep trong Linux.

Chúc bạn áp dụng thành công!