Bài viết này hãy cùng itsmeit.net thảo luận về các ví dụ về cách sử dụng lệnh grep trong Ubuntu & Linux. Grep là viết tắt của Global Regular Expression Print, nó được sử dụng để tìm kiếm một chuỗi ký tự trong một file được chỉ định, grep sẽ rất tiện lợi khi tìm kiếm các file log lớn.
50 ví dụ về cách sử dụng lệnh grep trong Ubuntu & Linux
1. Định vị thông tin trong một file duy nhất
Cách sử dụng cơ bản của lệnh grep là định vị các dòng chứa thông tin cụ thể từ các file được chỉ định, ví dụ đầu tiên này itsmeit sẽ dùng grep để lấy thông tin USER.
grep root /etc/passwd
$ grep $USER /etc/passwd

Ví dụ đầu tiên sẽ hiển thị tất cả các dòng chứa root trong file /etc/passwd. Lệnh thứ hai sẽ hiển thị tất cả các dòng tương tự có chứa user của bạn.
2. Định vị thông tin trong nhiều file
Để hiển thị các dòng chứa các tên hay từ khóa cụ thể từ nhiều file cùng một lúc hãy thêm tất cả các tên file được phân tách bằng khoảng trắng (dấu cách).
grep tukhoa test.txt test1.txt
3. Chỉ hiển thị phần phù hợp
Lệnh grep sẽ hiển thị toàn bộ dòng chứa từ khóa. Bạn có thể chặn đầu ra này và yêu cầu grep chỉ hiển thị phần phù hợp. Vì vậy, grep sẽ chỉ xuất ra các từ khóa được chỉ định, nếu nó tồn tại.
grep -o $USER /etc/passwd
$ grep --only-matching $USER /etc/passwd
4. Bỏ qua đối sánh chữ hoa chữ thường
Theo mặc định, lệnh grep trong Ubuntu & Linux sẽ tìm kiếm từ khóa đã cho theo cách phân biệt chữ hoa chữ thường. Đôi khi người dùng có thể không chắc chắn về trường hợp của từ khóa. Bạn có thể yêu cầu grep bỏ qua trường hợp của mẫu trong những trường hợp như vậy, như được minh họa bên dưới.
grep -i $USER /etc/passwd
$ grep --ignore-case $USER /etc/passwd
Điều này trả về một dòng hiển thị bổ sung trong terminal.
5. Đảo ngược các từ khóa phù hợp
lệnh grep trong Ubuntu & Linux cho phép người dùng đảo ngược đối sánh. Nó có nghĩa là grep sẽ in tất cả các dòng không chứa từ khóa đã cho.
grep -v tukhoa test.txt
$ grep --invert-match file test.txt
6. Đối sánh toàn bộ các từ
Tiện ích grep hiển thị bất kỳ dòng nào có chứa từ khóa. Vì vậy nó cũng sẽ in ra các dòng có hoa văn bên trong các từ hoặc câu tùy ý. Thường thì bạn sẽ muốn loại bỏ các giá trị này. Bạn có thể dễ dàng thực hiện việc này bằng cách sử dụng tùy chọn -w, như hình dưới đây.
grep hello /usr/share/dict/american-english
$ grep -w hello /usr/share/dict/american-english

Nếu bạn chạy 2 lênh trên lần lượt, bạn sẽ thấy sự khác biệt.
7. Đếm Number of Matches
Option -c rất tiện dụng trong trả về số lượng kết quả phù hợp thay vì hiển thị các dòng, cả 2 lệnh dưới đây kết quả giống nhau.
grep -c memory_limit /etc/php/7.4/fpm/php.ini
$ grep -c -w memory_limit /etc/php/7.4/fpm/php.ini
8. Hiển thị số dòng
Lệnh grep trong Ubuntu & Linux cũng có thể hiển thị số dòng nơi tìm thấy kết quả. Nó sử dụng chỉ mục dựa trên 1 dòng đầu tiên của file là dòng số 1. Và dòng thứ 10 là dòng số 10.
grep -n -w cat /usr/share/dict/american-english
$ grep --line-number -w cat /usr/share/dict/american-english
9. Chỉ hiển thị tiền tố filename
Mặt khác, đôi khi bạn có thể chỉ muốn các tên file chứa một số từ khóa. Bạn có thể sử dụng tùy chọn -l cho việc này. Dạng dài của tùy chọn này là –files-with-match.
grep -h file test.txt test1.txt
$ grep --no-filename file test.txt test1.txt
Khi sử dụng cả hai lệnh grep trong Ubuntu & Linux ở trên đều tương đương nhau nên bạn có thể chọn tùy ý. Chúng sẽ chỉ trả về các dòng có từ khóa phù hợp, không trả về tên file.
10. Chỉ hiển thị tiền tố file
Ví dụ tiếp theo trong câu lệnh grep trong Linux | Ubuntu đôi khi bạn có thể chỉ muốn các tên file chứa một số từ. Bạn có thể sử dụng tùy chọn -l cho việc này. Dạng dài của option này là –files-with-match.
grep -l cat /usr/share/dict/*-english
$ grep --files-with-matches cat /usr/share/dict/*-english

11. Đọc file một cách đệ quy
Bạn có thể yêu cầu grep đọc tất cả các file trong thư mục một cách đệ quy bằng cách sử dụng option -r hoặc –recursive. Thao tác này sẽ hiển thị tất cả các dòng có chứa kết quả trùng khớp và đặt tiền tố chúng bằng tên file nơi chúng được tìm thấy.
grep -r -w cat /usr/share/dict

12. Hiển thị phù hợp với toàn bộ từ
Bạn cũng có thể chỉ định lệnh grep trong Ubuntu & Linux sẽ hiển thị những kết quả phù hợp chứa kết quả khớp chính xác trong toàn bộ dòng. Ví dụ: lệnh dưới đây sẽ tạo ra các dòng chỉ chứa từ cat.
grep -r -x cat /usr/share/dict/
$ grep -r --line-regexp cat /usr/share/dict/
13. Chọn điểm bắt đầu
Trong Linux hay hệ điều hành Ubuntu, bạn có thể sử dụng lệnh grep để chỉ định khớp ở đầu dòng. Điều này được gọi là neo từ khóa. Bạn sẽ cần sử dụng toán tử dấu mũ ‘^’ cho mục đích này.
grep "^cat" /usr/share/dict/american-english
14. Chọn điểm kết thúc
grep "fish$" /usr/share/dict/american-english
15. Ghép một ký tự đơn
Lệnh grep trong Linux & Ubuntu với tiện ích Unix grep cho phép người dùng khớp bất kỳ ký tự đơn nào như một phần của từ khóa. Toán tử dấu chấm ‘.’
grep -x "c.t" /usr/share/dict/american-english
Lệnh này sẽ hiển thị tất cả các dòng chứa ba từ ký tự bắt đầu bằng c và kết thúc bằng t. Nếu bạn bỏ qua -x, đầu ra sẽ rất lớn vì grep sẽ hiển thị tất cả các dòng có bất kỳ sự kết hợp nào của các ký tự này. Bạn có thể sử dụng double .. để chỉ định hai ký tự ngẫu nhiên và tương tự.
16. Ghép từ một tập hợp các ký tự
grep "c[aeiou]t" /usr/share/dict/american-english
$ grep -x "m[aeiou]n" /usr/share/dict/american-english
– Ví dụ sử dụn lệnh grep trong ubuntu đầu tiên sẽ in tất cả các dòng trong từ điển american-english có chứa từ khóa c theo sau là một từ khóa và ký tự t.
– Ví dụ tiếp theo sẽ in ra tất cả các từ chính xác có chứa m theo sau là từ khóa rồi đến n.
17. Ghép từ một loạt các ký tự
grep "^[A-Z]" /usr/share/dict/american-english
$ grep "[A-Z]$" /usr/share/dict/american-english
Lệnh grep trong Linux | Ubuntu ví dụ đầu tiên sẽ in ra tất cả các dòng bắt đầu bằng bất kỳ chữ cái viết hoa nào. Lệnh thứ hai chỉ hiển thị những dòng kết thúc bằng chữ in hoa.
18. Bỏ qua các ký tự trong các từ khóa
grep -w "[^c]at$" /usr/share/dict/american-english
$ grep -w "[^c][aeiou]t" /usr/share/dict/american-english
Lệnh grep trong ubuntu đầu tiên hiển thị tất cả các từ kết thúc bằng at, trừ cat. [^ C] yêu cầu grep bỏ qua ký tự c khỏi tìm kiếm của nó. Ví dụ thứ hai yêu cầu grep hiển thị tất cả các từ kết thúc bằng một từ khóa theo sau là t và không chứa c.
19. Nhóm ký tự bên trong từ khóa
[] Chỉ cho phép bạn chỉ định một bộ ký tự duy nhất. Mặc dù bạn có thể sử dụng nhiều bộ dấu ngoặc để chỉ định các ký tự bổ sung, nhưng điều này không phù hợp nếu bạn đã biết mình quan tâm đến nhóm ký tự nào. Rất may, bạn có thể sử dụng () để nhóm nhiều ký tự trong các từ khóa của mình.
grep -E "(copy)" /usr/share/dict/american-english
$ egrep "(copy)" /usr/share/dict/american-english
20. Chỉ định các ký tự tùy chọn trong từ khóa
Lệnh grep trong Ubuntu & Linux cũng cho phép người dùng chỉ định các ký tự tùy chọn cho các từ khóa bằng dấu “?”. Bất kỳ thứ gì đứng trước ký tự đó sẽ là option trong từ khóa của bạn.
grep -E "(commu)?nist" /usr/share/dict/american-english
21. Chỉ định số lần lặp lại trong từ khóa
grep -E "[aeiou]{3}" /usr/share/dict/american-english
$ grep -E "c[aeiou]{2}t" /usr/share/dict/american-english
Lệnh đầu sẽ hiển thị tất cả các dòng chứa ba từ khóa, lệnh 2 sẽ hiển thị tất cả các dòng chứa c theo sau là 2 từ khóa rồi đến t.
22. Chỉ định một hoặc nhiều lần lặp lại
egrep -c "[aeiou]+" /usr/share/dict/american-english
$ egrep -c "[aeiou]{3}" /usr/share/dict/american-english
Lệnh grep trong Linux | Ubuntu ví dụ đầu tiên hiển thị số lần grep gặp một hoặc nhiều từ khóa liên tiếp. Và lệnh thứ hai hiển thị bao nhiêu dòng chứa ba từ khóa liên tiếp.
23. Chỉ định giới hạn dưới cho các lần lặp lại
egrep "[aeiou]{3,}" /usr/share/dict/american-english
Sử dụng egrep thay vì grep -E cho lệnh trên. Nó chọn tất cả các dòng chứa 3 hoặc nhiều từ khóa liên tiếp.
24. Chỉ định giới hạn trên cho các lần lặp lại
Ví dụ về egrep trong sử dụng lệnh grep trong Ubuntu & Linux
egrep "[aeiou]{,3}" /usr/share/dict/american-english
25. Chỉ định ranh giới trên và giới hạn dưới
egrep "[aeiou]{2,4}" /usr/share/dict/american-english
26. Chọn tất cả các ký tự
Bạn có thể sử dụng ký tự đại diện ‘*’ để chọn tất cả không hoặc nhiều lần xuất hiện của một lớp ký tự.
egrep "collect*" test.txt
$ egrep "c[aeiou]*t /usr/share/dict/american-english
27. Biểu thức chính quy thay thế
egrep "[AEIOU]{2}|[aeiou]{2}" /usr/share/dict/american-english
Lệnh grep trong linux này yêu cầu grep khớp với tất cả các dòng chứa 2 ký tự viết hoa liên tiếp hoặc ký tự nhỏ.
28. Chọn mẫu để so khớp các ký tự chữ và số
egrep "[0-9A-Za-z]{3}" /usr/share/dict/american-english
$ egrep "[[:alnum:]]{3}" /usr/share/dict/american-english
Cả hai lệnh trên đều đối sánh tất cả các dòng chứa tổ hợp ba ký tự liên tiếp 0-9, A-Z và a-z. Tuy nhiên, ví dụ thứ hai giúp chúng ta không phải tự mình viết ký tự chỉ định. Đây được gọi là một biểu thức đặc biệt và grep cung cấp một số biểu thức trong số đó.
29. Escape Special Characters
egrep "\-" /etc/passwd
Lệnh grep trong Ubuntu | Linux ở trên khớp tất cả các dòng của file /etc/passwd với dấu gạch ngang “-” và hiển thị chúng. Bạn có thể thoát khỏi bất kỳ ký tự đặc biệt nào khác bằng cách sử dụng dấu gạch chéo ngược theo cách này.
30. Repeat grep Patterns
egrep "([A-Za-z ]*)" test.txt
Sử dụng lệnh grep kết hợp với lệnh ls
Một trong những thứ hay ho về lệnh grep là khả năng ứng dụng phổ biến của nó. Bạn có thể sử dụng lệnh này để lọc ra thông tin cần thiết khi chạy các lệnh trên terminal. Mặc dù phần bên dưới cung cấp cho bạn cái nhìn sơ lược về một số trong số chúng, nhưng bạn có thể áp dụng các nguyên tắc cốt lõi cửa lệnh grep trong Ubuntu & Linux ở bất cứ đâu.
31. Hiển thị tất cả các Sub-directories
ls -l ~ | grep "drw"
Vì tất cả các thư mục trong Linux đều có drw ở đầu nên chỉ cần viết drw
32. Hiển thị tất cả các tập tin Mp3
ls /path/to/music/dir/ | grep ".mp3";
Lệnh ls sẽ hiển thị nội dung của thư mục nhạc của bạn và sau đó lệnh grep sẽ khớp với tất cả các dòng có chứa .mp3 trong đó.
33. Tìm kiếm văn bản trong file
grep -l 'main' /path/to/files/*.c
Lệnh grep trong ubuntu | Linux sẽ thêm mã màu cho phần đối sánh để giúp bạn dễ dàng hình dung kết quả của mình. Tuy nhiên, nếu nó không thực hiện được trong máy Linux của bạn, hãy thử thêm tùy chọn –color vào lệnh của bạn.
34. Tìm Network Hosts
File /etc/hosts chứa thông tin như IP máy chủ và tên máy chủ. Bạn có thể sử dụng grep để tìm thông tin cụ thể từ mục nhập này bằng lệnh dưới đây.
grep -E -o "([0-9]{1,3}[\.]){3}[0-9]{1,3}" /etc/hosts
35. Tìm các packages đã cài đặt
dpkg --list | grep "chrome"
ii google-chrome-stable 97.0.4692.71-1 amd64 The web browser from Google
36. Tìm các Images đang Available
dpkg --list | grep linux-image
Lệnh grep trong Ubuntu & Linux với ví dụ trên nó sẽ hiển thị kết quả của dpkg –list và đưa nó vào grep. Sau đó, nó khớp với tất cả các dòng cho ký tự.
37. Tìm Information cho CPU Model
cat /proc/cpuinfo | grep -i 'model'
$ grep -i "model" /proc/cpuinfo
38. Tìm thông tin log file
Linux lưu tất cả các loại log trong thư mục /var/log. Bạn có thể dễ dàng thu thập thông tin hữu ích từ các file log này.
grep -i "cron" /var/log/auth.log
39. Tìm các thông tin Process
ps auxww | grep 'guake'
Lệnh grep trong Linux kết hợp như trên sẽ hiển thị tất cả thông tin liên quan đến package guake. Bạn có thể thay thế guake bằng bất kỳ package nào trên máy của bạn.
40. Chọn những IPs hợp lệ
egrep '\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)' /etc/hosts
Lệnh trên sẽ không hiển thị bất kỳ địa chỉ IP không hợp lệ nào ví dụ như 999.999.999.999
41. Tìm kiếm bên trong file nén
zgrep -i "tukhoa" test.txt.gz
42. Đếm số dòng trống
grep -c "^$" test.txt
LLệnh grep trong Linux | Ubuntu ở ví dụ này nếu file chỉ chứa một dòng trống duy nhất, lệnh này trả về 1. Các dòng trống được so khớp bằng cách sử dụng biểu thức chính quy “^ $” và số lượng của chúng được in bằng cách tận dụng tùy chọn -c.
43. Tìm nhiều từ khóa
grep -e 'tukhoa' -e 'tukhoa2' test.txt
$ grep -e 'tukhoa' test.txt | grep -e 'tukhoa2'
$ grep -e 'tukhoa\| tukhoa2' test.txt
44. Tìm Email hợp lệ
grep -E -o "\b[A-Za-z0-9._%+-][email protected][A-Za-z0-9.-]+\.[A-Za-z]{2,6}\b" /duongdan/filenme
45. Chọn từ khóa từ file
Khi sử dụng Lệnh grep trong Linux, bạn có thể sử dụng option -f cho các ký tự để chạy grep từ các file được xác định trước khá dễ dàng.
echo "sample"> file
$ grep -f file test.txt
46. Control Contexts
grep -A2 'file' test.txt
$ grep -B2 'file' test.txt
$ grep -C3 'Linux' test.txt
Lệnh đầu tiên hiển thị 2 dòng tiếp theo, lệnh thứ hai hiển thị 2 dòng trước đó và lệnh cuối cùng hiển thị cả hai.
47. Loại bỏ thông báo lỗi
grep -s 'file' testing.txt
$ grep −−no-messages 'file' testing.txt
Lệnh grep trong Linux | Ubuntu ở ví dụ này mặc dù không có file nào có tên testing.txt nhưng grep không đưa ra bất kỳ thông báo lỗi nào cho lệnh này.
48. Hiển thị thông tin phiên bản
grep -V
$ grep --version

49. Hiển thị thông tin trợ giúp
grep --help
50. Tài liệu Tham khảo
Lệnh grep trong Linux & Ubuntu, tài liệu grep cực kỳ chi tiết và cung cấp giới thiệu kỹ lưỡng về các tính năng có sẵn và cách sử dụng các option. Bạn có thể tham khảo trang hướng dẫn sử dụng grep bằng lệnh dưới đây.
man grep
Trên đây là tổng hợp các ví dụ thực tế về cách sử dụng lệnh grep trong Ubuntu & Linux, hy vọng qua bài viết này bạn sẽ có một cái nhìn tổng quát hơn và hiểu rõ hơn về lệnh grep.
Xem thêm : Lệnh SS trên Linux cách để sử dụng lệnh ss và 21 ví dụ về lệnh ss