Lệnh grep (Global Regular Expressions Print) là một công cụ mạnh để tìm kiếm và lọc văn bản trong Ubuntu hoặc Linux Debian. Cho dù bạn là nhà phát triển, quản trị viên hệ thống hay chỉ là người dùng thông thường, việc biết cách sử dụng lệnh grep trong Linux có thể giúp bạn nhanh chóng tìm thấy thông tin mình cần trong file nhật ký, file cấu hình và các file dựa trên văn bản khác như mã code HTML, PHP…
Những ví dụ về cách sử dụng câu lệnh grep trong Linux hoặc Ubuntu
grep -r;
Cách sử dụng lệnh grep trong Linux đầu tiên và cơ bản nhất đó là grep -r
. Giả sử bạn muốn tìm kiếm một từ, 1 ký tự hoặc cụm từ cụ thể trong 1 thư mục nào đó. Bạn có thể sử dụng lệnh grep cùng với tùy chọn -r
, ItsmeIT sẽ lấy ví dụ để tìm và hiển thị giá trị “memory_limit” trong thư mục /etc/php trên Linux như thế này:
grep -r memory_limit /etc/php/

Như bạn đã thấy trong ảnh chụp màn hình từ ItsmeIT, sau khi sử dụng grep -r để tìm giá trị của “memory_limit” thì nó đã hiển thị tất cả những kết quả cấu hình trong thư mục /etc/php.
grep -c;
Lệnh grep -c được sử dụng để đếm số lần xuất hiện của một mẫu trong file hoặc nhiều file. Kết quả hiển thị của lệnh này là số dòng trong (các) tệp khớp với từ khóa/chuỗi được chỉ định. Câu lệnh grep trong Linux với tùy chọn -c
rất tiện dụng để trả về số lượng kết quả phù hợp thay vì hiển thị các dòng.
grep -c memory_limit /etc/php/8.0/fpm/php.ini /etc/php/8.0/fpm/php.ini

grep -c "^$" /etc/php/8.0/fpm/php.ini
Lệnh grep -c
trên sẽ đếm số dòng trống (không có ký tự nào trên dòng) trong tập tin php.ini
. Kết quả trả về là số lượng dòng trống. Cụ thể:
grep
: lệnh tìm kiếm chuỗi trong tập tin-c
: tùy chọn để đếm số lần xuất hiện của chuỗi tìm kiếm thay vì hiển thị các dòng chứa chuỗi tìm kiếm"^$"
: chuỗi tìm kiếm là một dòng trống (bắt đầu^
và kết thúc$
không có bất kỳ ký tự nào ở giữa)
Vì vậy, cách sử dụng lệnh grep trong Ubuntu hoặc Linux với option -c
bên trên sẽ đếm số dòng trống trong tập tin php.ini
và trả về số lượng đó.
grep -n;
Lệnh grep -n trong Linux được sử dụng để hiển thị số dòng của các kết quả tìm kiếm. Khi sử dụng lệnh này, grep sẽ hiển thị tất cả các dòng chứa chuỗi tìm kiếm, và số thứ tự của mỗi dòng đó sẽ được đưa ra trước nội dung dòng đó. Ví dụ dưới đây đã hiển thị giá trị của memory_limit nằm ở dòng 430.
grep -n memory_limit /etc/php/8.0/fpm/php.ini

grep -E;
Câu lệnh grep -E
(hoặc grep –extended-regexp) trong Linux được sử dụng để tìm kiếm các chuỗi với các biểu thức chính quy (regular expressions) mở rộng. Nó giúp bạn tìm kiếm các chuỗi phức tạp hơn với nhiều ký tự đặc biệt hơn so với chỉ sử dụng grep thông thường.
grep -E "(copy)" /etc/php/8.1/fpm/php.ini

Đây là một ví dụ khác để tìm kiếm các địa chỉ IP trong tệp /etc/hosts của Linux hoặc Ubuntu bằng lệnh grep. Với tùy chọn -E
để sử dụng biểu thức chính quy mở rộng và -o
để chỉ hiển thị phần khớp được tìm thấy, lệnh sử dụng biểu thức chính quy để tìm các chuỗi số từ 0 đến 9 với độ dài từ 1 đến 3 kết hợp với dấu chấm để tìm các địa chỉ IP hợp lệ trong file /etc/hosts
.
grep -E -o "([0-9]{1,3}[\.]){3}[0-9]{1,3}" /etc/hosts

Thêm một ví dụ khác về cách sử dụng lệnh grep trong linux với tùy chọn -E kết hợp với -o để tìm kiếm và hiển thị các địa chỉ email trong tệp tin “filename” được đặt trong thư mục “/duongdan/” bằng cách sử dụng grep với tùy chọn “-E” để cho phép sử dụng biểu thức chính quy mở rộng và tùy chọn “-o” để chỉ hiển thị các đối tượng phù hợp chứ không hiển thị toàn bộ dòng tương ứng.
grep -E -o "\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,6}\b" /duongdan/filename
Biểu thức chính quy được sử dụng trong lệnh này có chức năng tìm kiếm định dạng email chuẩn: “username@domain.com” hoặc “username@domain.co.xx” (với xx là tên miền quốc gia).
zgrep -i;
grep -i "itsmeit" /var/log/nginx/itsmeit.co.vhost.err;

Với ví dụ về cách sử dụng lệnh grep trong linux với option -i
như trên ảnh minh họa cho thấy ItsmeIT đã sử dụng grep để tìm kiếm chuỗi có chứa “cron” trong tập tin nhật ký /var/log/auth.log
trên hệ thống Linux. Tùy chọn -i
được sử dụng để tìm kiếm không phân biệt chữ hoa/chữ thường. Kết quả trả về sẽ là tất cả các dòng trong tập tin nhật ký chứa chuỗi “cron”.
zgrep -i "tukhoa" test.txt.gz
Lệnh zgrep
dùng để tìm kiếm một từ hoặc cụm từ trong một tập tin nén bằng gzip (đuôi .gz). Tùy chọn -i
được sử dụng để tìm kiếm không phân biệt chữ hoa chữ thường. Trong trường hợp này, lệnh sẽ tìm kiếm từ “tukhoa” trong tập tin test.txt.gz
.
grep -v, -l, -L, -w, -A, -B
Một số những option cho lệnh grep trong Linux hoặc Ubuntu nâng cao phổ biến dưới đây bạn có thể thử tương tự như các ví dụ mà ItsmeIT đã cung cấp ở trên nha:
-v
(hoặc--invert-match
): Hiển thị các dòng không chứa kết quả tìm kiếm.-l
(hoặc--files-with-matches
): Chỉ hiển thị tên các tệp tin chứa kết quả tìm kiếm, không hiển thị nội dung.-L
(hoặc--files-without-match
): Chỉ hiển thị tên các tệp tin không chứa kết quả tìm kiếm.-w
(hoặc--word-regexp
): Chỉ tìm kiếm các từ riêng lẻ thay vì kết hợp các ký tự bất kỳ.-A
(hoặc--after-context
): Hiển thị số lượng dòng sau kết quả tìm kiếm.-B
(hoặc--before-context
): Hiển thị số lượng dòng trước kết quả tìm kiếm.
Các tùy chọn này giúp tăng tính linh hoạt và sức mạnh của lệnh grep trong việc tìm kiếm thông tin trong tệp tin và thư mục. Ngoài ra khi sử dụng lệnh grep trong Linux hoặc Ubuntu, một trong những ứng dụng hay ho khác đó là kết hợp grep với lệnh ls, find, dpkg, cat
. Bạn có thể tìm kiếm các tệp hoặc thư mục cụ thể trong cấu trúc thư mục của hệ thống và lọc kết quả trả về để thực hiện tìm kiếm nhanh chóng hơn.
grep kết hợp với ls
Để minh họa cho việc kết hợp lệnh ls với lệnh grep, ItsmeIT sẽ thử một ví dụ đơn giản là hiển thị tất cả các thư mục con trong thư mục home của mình. Vì tất cả các thư mục đều bắt đầu với chuỗi “drw”, ta có thể sử dụng lệnh “ls -l ~” để liệt kê tất cả các thư mục trong thư mục này, sau đó sử dụng lệnh grep để lọc kết quả với chuỗi “drw”:
ls -l ~ | grep "drw" (hoặc) ls -l /home/itsmeit | grep "drw"

Một ví dụ khác về cách sử dụng lệnh grep trong linux kết hợp với ls để tìm và thị tất cả các file Mp3
ls -R /media/itsmeit/Media/Music | grep -E '\.mp3$'
Lệnh grep trong Linux với tùy chọn -R
trên sẽ tìm kiếm tất cả các file âm thanh có định dạng .mp3 trong thư mục /Music và tất cả các thư mục con của nó. Tùy chọn -R
cho phép lệnh ls
tìm kiếm đệ quy trong các thư mục con trên máy Ubuntu của mình. Kết quả sẽ được lọc thông qua grep với tùy chọn -E
để sử dụng biểu thức chính quy và chỉ hiển thị các tệp có đuôi .mp3
.
grep với find
find /đườngdẫn/thưmục -type f -name '*.mp3' -print0 | xargs -0 grep -l ''
Trong đó:
/đườngdẫn/thưmục
là đường dẫn đến thư mục chứa các file .mp3.-type f
chỉ tìm kiếm trong các tệp (file), không tìm kiếm trong các thư mục.-name '*.mp3'
chỉ tìm kiếm các file có đuôi .mp3.-print0
in ra kết quả tìm kiếm cách nhau bằng null character thay vì dấu cách, để đảm bảo rằng tên file có dấu cách sẽ không bị xử lý sai.xargs -0 grep -l ''
đọc các kết quả tìm kiếm từfind
và tìm kiếm trong chính các file đó để xác định xem chúng có chứa chuỗi tìm kiếm không. Kết quả sẽ in ra tên các file chứa chuỗi tìm kiếm.
Lưu ý rằng khi dùng lệnh grep trong linux để tìm kiếm trên toàn bộ hệ thống có thể mất nhiều thời gian và tài nguyên như chiếm nhiều RAM, CPU tăng cao. Bạn nên chỉ tìm kiếm trong các thư mục cần thiết để giảm thiểu thời gian tìm kiếm.
dpkg với grep

Ví dụ dưới đây sẽ sử dụng lệnh grep trong linux hoặc ubuntu để liệt kê các gói (package) đã được cài đặt trên hệ thống và lọc ra những gói liên quan đến “chrome”.
dpkg --list | grep "chrome"
grep kết hợp với lệnh cat
cat /proc/cpuinfo | grep -i 'model' grep -i "model" /proc/cpuinfo
Cả hai lệnh đều được sử dụng để hiển thị thông tin về mô hình CPU (model) trong file /proc/cpuinfo. Tuy nhiên, cú pháp của hai lệnh có chút khác nhau.

Lệnh đầu tiên sử dụng lệnh cat
để hiển thị toàn bộ nội dung trong file /proc/cpuinfo
, sau đó sử dụng lệnh grep để tìm kiếm và lọc ra những dòng chứa từ “model” (với tùy chọn -i
để tìm kiếm không phân biệt chữ hoa/chữ thường).
Lệnh thứ hai sử dụng lệnh grep trực tiếp trên file /proc/cpuinfo để tìm kiếm và lọc ra những dòng chứa từ “model”.
ps và grep
ps auxww | grep 'chrome'
Lệnh ps
là viết tắt của “process status” và nó được sử dụng để liệt kê các tiến trình đang chạy trên hệ thống Ubuntu hoặc Linux debian. Tùy chọn auxww
sẽ hiển thị tất cả các tiến trình đang chạy (bao gồm cả tiến trình của các người dùng khác) và chi tiết của các tiến trình này. Lệnh grep
được sử dụng để lọc các dòng của đầu ra hiển thị từ lệnh ps
.

Vì vậy, lệnh ps auxww | grep 'chrome'
sẽ hiển thị tất cả các tiến trình đang chạy và lọc ra các dòng chứa từ ‘chrome’. Điều này có thể giúp tìm ra tiến trình đang chạy của chomre terminal nếu nó đang chạy trên hệ thống của bạn.
Đó là một số ví dụ thực tế về cách ItsmeIT thường sử dụng lệnh grep trong Linux debian hoặc Ubuntu để kiểm tra nhật ký và xử lý lỗi trong quá trình làm việc. Tuy nhiên, đây chỉ là một phần nhỏ của sức mạnh của lệnh grep. Sau khi đọc bài viết này, chắc chắn bạn sẽ sử dụng lệnh grep nhiều hơn và khám phá được sự mạnh mẽ và tuyệt vời của nó.
– Advertising –