Lệnh Grep Trong Linux (tìm Văn Bản Trong Tệp) - Android 2022
Có thể bạn quan tâm
Lệnh grep là viết tắt của cụm từ in biểu thức chính quy toàn cầu, là một trong những lệnh mạnh nhất và được sử dụng phổ biến nhất trong Linux.
Grep tìm kiếm một hoặc nhiều tệp đầu vào cho các dòng khớp với một mẫu nhất định và ghi từng dòng khớp vào đầu ra tiêu chuẩn. Nếu không có tệp nào được chỉ định, grep đọc từ đầu vào tiêu chuẩn, thường là đầu ra của lệnh khác.
Trong hướng dẫn này, chúng tôi sẽ chỉ cho bạn cách sử dụng grep thông qua các ví dụ thực tế và giải thích chi tiết về các tùy chọn grep GNU phổ biến nhất.
Cú pháp lệnh Grep
Trước khi đi vào cách sử dụng grep , hãy bắt đầu bằng cách xem lại cú pháp cơ bản.
Các biểu thức tiện ích grep có dạng sau:
grep PATTERN
Các mục trong ngoặc vuông là tùy chọn.
- OPTIONS - Không hoặc nhiều tùy chọn. Grep cung cấp một số tùy chọn kiểm soát hành vi của nó. PATTERN - Mẫu tìm kiếm. FILE - Không hoặc nhiều tên tệp đầu vào.
Để có thể tìm kiếm tệp, người dùng đang chạy lệnh phải có quyền truy cập đọc vào tệp.
Cách sử dụng grep để Tìm kiếm Chuỗi trong Tệp
Cách sử dụng cơ bản nhất của grep là tìm kiếm một chuỗi (văn bản) trong một tệp.
Ví dụ: để hiển thị các dòng từ tệp /etc/passwd có chứa chuỗi bash bạn có thể sử dụng lệnh sau:
grep bash /etc/passwd
Đầu ra sẽ trông giống như thế này:
root:x:0:0:root:/root:/bin/bash linuxize:x:1000:1000:linuxize:/home/linuxize:/bin/bash
Nếu chuỗi bao gồm khoảng trắng, bạn cần đặt nó trong dấu ngoặc kép đơn hoặc kép:
grep "Gnome Display Manager" /etc/passwd
Đảo ngược trận đấu (không bao gồm)
Để hiển thị các dòng không khớp với mẫu, sử dụng tùy chọn -v (hoặc --invert-match ).
Ví dụ: để hiển thị các dòng từ tệp /etc/passwd không chứa chuỗi nologin bạn có thể sử dụng lệnh sau:
grep -v nologin /etc/passwd
root:x:0:0:root:/root:/bin/bash colord:x:124:124::/var/lib/colord:/bin/false git:x:994:994:git daemon user:/:/usr/bin/git-shell linuxize:x:1000:1000:linuxize:/home/linuxize:/bin/bash
Cách sử dụng Grep để tìm kiếm chuỗi trong đầu ra lệnh
Thay vì chỉ định các tệp đầu vào, bạn có thể chuyển đầu ra của một lệnh khác sang grep , và sau đó chỉ hiển thị các dòng khớp với một mẫu nhất định.
Ví dụ: để tìm hiểu các quy trình đang chạy trên hệ thống của bạn dưới dạng www-data người dùng www-data bạn có thể sử dụng lệnh ps sau:
ps -ef | grep www-data
www-data 18247 12675 4 16:00 ? 00:00:00 php-fpm: pool www root 18272 17714 0 16:00 pts/0 00:00:00 grep --color=auto --exclude-dir=.bzr --exclude-dir=CVS --exclude-dir=.git --exclude-dir=.hg --exclude-dir=.svn www-data www-data 31147 12770 0 Oct22 ? 00:05:51 nginx: worker process www-data 31148 12770 0 Oct22 ? 00:00:00 nginx: cache manager process
Bạn cũng có thể xâu chuỗi nhiều đường ống theo lệnh. Như bạn có thể thấy trong đầu ra ở trên, cũng có một dòng chứa quá trình grep . Nếu bạn không muốn dòng đó được hiển thị, hãy chuyển đầu ra sang một thể hiện grep khác như hiển thị bên dưới.
ps -ef | grep www-data | grep -v grep
www-data 18247 12675 4 16:00 ? 00:00:00 php-fpm: pool www root 18272 17714 0 16:00 pts/0 00:00:00 grep --color=auto --exclude-dir=.bzr --exclude-dir=CVS --exclude-dir=.git --exclude-dir=.hg --exclude-dir=.svn www-data www-data 31147 12770 0 Oct22 ? 00:05:51 nginx: worker process www-data 31148 12770 0 Oct22 ? 00:00:00 nginx: cache manager process
Tìm kiếm đệ quy
Để tìm kiếm đệ quy một mẫu, hãy sử dụng tùy chọn -r (hoặc --recursive ). Điều này sẽ tìm kiếm thông qua tất cả các tệp trong thư mục được chỉ định, bỏ qua các liên kết tượng trưng được gặp đệ quy. Để theo tất cả các liên kết tượng trưng, sử dụng tùy chọn -R (hoặc --dereference-recursive ).
Trong ví dụ sau, chúng tôi đang tìm kiếm chuỗi linuxize.com trong tất cả các tệp trong thư mục /etc :
grep -r linuxize.com /etc
Lệnh sẽ in các dòng khớp với tiền tố của đường dẫn đầy đủ đến tệp.
/etc/hosts:127.0.0.1 node2.linuxize.com /etc/nginx/sites-available/linuxize.com: server_name linuxize.com www.linuxize.com;
Nếu thay vào đó -r bạn sử dụng tùy chọn -R grep sẽ theo tất cả các liên kết tượng trưng:
grep -R linuxize.com /etc
Lưu ý dòng cuối cùng của đầu ra. Dòng đó không được in trong ví dụ trên vì các tệp bên trong thư mục sites-enabled của Nginx là sites-enabled liên kết tượng trưng đến các tệp cấu hình bên trong thư mục sites-available của sites-available .
/etc/hosts:127.0.0.1 node2.linuxize.com /etc/nginx/sites-available/linuxize.com: server_name linuxize.com www.linuxize.com; /etc/nginx/sites-enabled/linuxize.com: server_name linuxize.com www.linuxize.com;
Chỉ hiển thị tên tệp
Để chặn đầu ra grep mặc định và chỉ in tên của các tệp chứa mẫu phù hợp, bạn có thể sử dụng tùy chọn -l (hoặc --files-with-matches ).
Ví dụ: để tìm kiếm trong tất cả các tệp kết thúc bằng .conf trong thư mục làm việc hiện tại và chỉ in tên của các tệp chứa chuỗi linuxize.com :
grep -l linuxize.com *.conf
Đầu ra sẽ trông giống như thế này:
tmux.conf haproxy.conf
Tùy chọn -l thường được sử dụng kết hợp với tùy chọn đệ quy -R :
grep -Rl linuxize.com /tmp
Tìm kiếm không nhạy cảm
Theo mặc định, grep biệt chữ hoa chữ thường. Điều này có nghĩa là các ký tự chữ hoa và chữ thường được coi là khác biệt.
Để bỏ qua trường hợp khi tìm kiếm, sử dụng tùy chọn -i (hoặc --ignore-case ).
Ví dụ: khi tìm kiếm Zebra mà không có tùy chọn nào, lệnh sau sẽ không hiển thị bất kỳ đầu ra nào, tức là có các dòng khớp:
grep Zebra /usr/share/words
Nhưng nếu bạn thực hiện tìm kiếm không phân biệt chữ hoa chữ thường bằng tùy chọn -i , nó sẽ khớp cả chữ in hoa và chữ thường:
grep -i Zebra /usr/share/words
Xác định kiểu chữ nổi Zebra Zebra sẽ phù hợp với kiểu ngựa vằn, chữ ZEbrA, hoặc bất kỳ sự kết hợp nào khác của chữ in hoa và chữ thường cho chuỗi đó.
zebra zebra's zebras
Tìm kiếm từ đầy đủ
Khi tìm kiếm trong các trò chơi điện tử, grep cũng sẽ in các dòng trong đó kiểu chữ gnu phạm được nhúng trong các từ lớn hơn, chẳng hạn như là cy cyusus hay hoặc Magn Magn.
grep gnu /usr/share/words
cygnus gnu interregnum lgnu9d lignum magnum magnuson sphagnum wingnut
Để chỉ trả về những dòng có chuỗi được chỉ định là toàn bộ từ (được bao quanh bởi các ký tự không phải từ), hãy sử dụng tùy chọn -w (hoặc --word-regexp ).
Các ký tự từ bao gồm các ký tự chữ và số ( az , AZ và 0-9 ) và dấu gạch dưới ( _ ). Tất cả các nhân vật khác được coi là nhân vật không từ.grep -w gnu /usr/share/words
gnu
Hiển thị số dòng
Để hiển thị số lượng dòng chứa chuỗi khớp với mẫu, sử dụng tùy chọn -n (hoặc --line-number ). Khi sử dụng tùy chọn này, grep sẽ in các kết quả khớp với đầu ra tiêu chuẩn có tiền tố với số dòng được tìm thấy trên đó.
Ví dụ: để hiển thị các dòng từ tệp /etc/services chứa chuỗi bash tiền tố với số dòng phù hợp, bạn có thể sử dụng lệnh sau:
grep -n 10000 /etc/services
Đầu ra bên dưới cho chúng ta thấy rằng các kết quả khớp được tìm thấy trên các dòng 10423 và 10424.
10423:ndmp 10000/tcp 10424:ndmp 10000/udp
Đếm các trận đấu
Để in một số dòng phù hợp với đầu ra tiêu chuẩn, sử dụng tùy chọn -c (hoặc --count ).
Trong ví dụ dưới đây, chúng tôi đang đếm số tài khoản có /usr/bin/zsh làm vỏ.
grep -c '/usr/bin/zsh' /etc/passwd
4
Tìm kiếm nhiều chuỗi (mẫu)
Có thể tham gia hai hoặc nhiều mẫu tìm kiếm bằng toán tử OR | .
Theo mặc định, grep diễn giải mẫu như một biểu thức chính quy cơ bản trong đó các ký tự meta như | mất ý nghĩa đặc biệt của chúng, và các phiên bản gạch chéo của chúng phải được sử dụng.
Trong ví dụ dưới đây, chúng tôi đang tìm kiếm tất cả các lần xuất hiện của các từ fatal , error và critical trong tệp lỗi nhật ký Nginx:
grep 'fatal\|error\|critical' /var/log/nginx/error.log
grep -E 'fatal|error|critical' /var/log/nginx/error.log
Chế độ yên lặng
--quiet (hoặc --quiet ) bảo grep không ghi bất cứ điều gì vào thiết bị đầu cuối (đầu ra tiêu chuẩn). Nếu một kết quả khớp được tìm thấy, lệnh sẽ thoát với trạng thái 0 . Điều này hữu ích khi sử dụng grep trong shell script nơi bạn muốn kiểm tra xem một tệp có chứa chuỗi hay không và thực hiện một hành động nhất định tùy thuộc vào kết quả.
Dưới đây là một ví dụ về việc sử dụng grep trong chế độ im lặng làm lệnh kiểm tra trong câu lệnh if:
if grep -q PATTERN filename then echo pattern found else echo pattern not found fi
Biểu thức chính quy cơ bản
GNU Grep có hai bộ tính năng biểu thức chính quy, Cơ bản và Mở rộng. Theo mặc định, grep diễn giải mẫu như một biểu thức chính quy cơ bản.
Khi được sử dụng trong chế độ biểu thức chính quy cơ bản, tất cả các ký tự khác ngoại trừ các ký tự meta, thực sự là các biểu thức chính quy khớp với chính chúng. Dưới đây là danh sách các ký tự meta được sử dụng phổ biến nhất:
-
Sử dụng biểu tượng ^ (dấu mũ) để khớp với biểu thức ở đầu một dòng. Trong ví dụ sau, chuỗi ^kangaroo sẽ chỉ khớp nếu nó xuất hiện ở đầu dòng.
grep "^kangaroo" file.txt
Sử dụng ký hiệu $ (đô la) để khớp với biểu thức ở cuối dòng. Trong ví dụ sau, chuỗi kangaroo$ sẽ chỉ khớp nếu nó xuất hiện ở cuối dòng.
grep "kangaroo$" file.txt
Sử dụng . biểu tượng (dấu chấm) để khớp với bất kỳ ký tự đơn nào. Ví dụ: để khớp với bất cứ thứ gì bắt đầu bằng kan thì có hai ký tự và kết thúc bằng chuỗi roo , bạn có thể sử dụng mẫu sau:
grep "kan..roo" file.txt
Sử dụng (ngoặc) để khớp với bất kỳ ký tự đơn nào được đặt trong ngoặc. Ví dụ: tìm các dòng có chứa dấu accept hoặc accent , bạn có thể sử dụng mẫu sau:
grep "accet" file.txt
Sử dụng (ngoặc) để khớp với bất kỳ ký tự đơn nào được đặt trong ngoặc. Mẫu sau sẽ khớp với bất kỳ tổ hợp chuỗi nào có chứa co(any_letter_except_l)a , chẳng hạn như coca , cobalt , v.v., nhưng sẽ không khớp với các dòng có chứa cola , grep "coa" file.txt
Để thoát khỏi ý nghĩa đặc biệt của ký tự tiếp theo, hãy sử dụng biểu tượng \ (dấu gạch chéo ngược).
Biểu thức chính quy mở rộng
Để diễn giải mẫu dưới dạng biểu thức chính quy mở rộng, hãy sử dụng tùy chọn -E (hoặc --extended-regexp ). Các biểu thức chính quy mở rộng bao gồm tất cả các ký tự meta cơ bản, cùng với các ký tự meta bổ sung để tạo các mẫu tìm kiếm phức tạp và mạnh mẽ hơn. Dưới đây là một số ví dụ:
-
Khớp và trích xuất tất cả các địa chỉ email từ một tệp nhất định:
grep -E -o "\b+@+\.{2, 6}\b" file.txt
Khớp và trích xuất tất cả các địa chỉ IP hợp lệ từ một tệp đã cho:
grep -E -o '(25|2|??)\.(25|2|??)\.(25|2|??)\.(25|2|??)' file.txt
Tùy chọn -o được sử dụng để chỉ in chuỗi phù hợp.
In dòng trước trận đấu
Để in một số dòng cụ thể trước khi khớp dòng, sử dụng tùy chọn -B (hoặc --before-context ).
Ví dụ: để hiển thị năm dòng ngữ cảnh hàng đầu trước khi khớp các dòng, bạn sẽ sử dụng lệnh sau:
grep -B 5 root /etc/passwd
Dòng in sau một trận đấu
Để in một số dòng cụ thể sau khi khớp các dòng, sử dụng tùy chọn -A (hoặc --after-context ).
Ví dụ: để hiển thị năm dòng ngữ cảnh theo sau các dòng khớp, bạn sẽ sử dụng lệnh sau:
grep -A 5 root /etc/passwd
Phần kết luận
Lệnh grep cho phép bạn tìm kiếm một mẫu bên trong các tệp. Nếu khớp nếu tìm thấy, grep sẽ in các dòng chứa mẫu đã chỉ định.
Có nhiều hơn nữa để tìm hiểu về Grep tại trang Hướng dẫn sử dụng của Grep.
thiết bị đầu cuối grepTừ khóa » Cách Dùng Lệnh Grep Trong Linux
-
Tìm Hiểu Về Lệnh GREP Trong Linux - Viblo
-
Hướng Dẫn Cách Dùng Lệnh Grep Trong Linux để Tìm Kiếm - Vietnix
-
10 Ví Dụ Về Lệnh Grep Trong Linux
-
Top 10 Cách Dùng Lệnh Grep Trong Linux Hay Nhất - Freetuts
-
Lệnh Grep Toàn Tập Image Lệnh Grep Toàn Tập
-
Những điều Tâm đắc Nhất Khi Sử Dụng Lệnh GREP
-
10 Ví Dụ Về Sử Dụng Lệnh Grep Trên Linux - Knowledge Base
-
Grep Command Trong Linux - Cách Sử Dụng Lệnh Grep - Hostinger
-
Hướng Dẫn Sử Dụng Lệnh Grep Trong Linux - HOSTVN
-
Hướng Dẫn Sử Dụng Câu Lệnh Grep Trong Linux - HOSTVN Blog
-
Grep Là Gì? Cách Sử Dụng Lệnh Grep Trong Linux/UNIX | BKHOST
-
Cách Sử Dụng Lệnh Grep Và Các Ví Dụ Tree Linux
-
Cách Sử Dụng Lệnh Grep Trong Linux - VinaSupport
-
Lệnh Grep Trong Linux (Tìm Văn Bản Trong Tệp)