Cách Grep cho nhiều chuỗi, mẫu hoặc từ

Tác giả sysadmin, T.Sáu 19, 2023, 01:23:06 CHIỀU

« Chủ đề trước - Chủ đề tiếp »

0 Thành viên và 3 Khách đang xem chủ đề.

Cách Grep cho nhiều chuỗi, mẫu hoặc từ


Grep là một tiện ích mạnh mẽ có sẵn theo mặc định trên các hệ thống dựa trên UNIX. Tên này là viết tắt của Global Regular Expression Print.


Bằng cách sử dụng lệnh grep, bạn có thể tùy chỉnh cách công cụ tìm kiếm một mẫu hoặc nhiều mẫu trong trường hợp này. Bạn có thể grep nhiều chuỗi trong các tệp và thư mục khác nhau. Công cụ in tất cả các dòng có chứa các từ bạn chỉ định làm mẫu tìm kiếm.

Trong hướng dẫn này, chúng tôi sẽ chỉ cho bạn cách sử dụng grep để tìm kiếm nhiều từ hoặc mẫu chuỗi. Thực hiện theo các ví dụ trong hướng dẫn này để tìm hiểu cách sử dụng grep hiệu quả nhất.

1. Điều kiện tiên quyết

  • Hệ thống tương tự Linux hoặc UNIX
  • Truy cập vào một thiết bị đầu cuối hoặc dòng lệnh
  • Người dùng có quyền truy cập vào các tệp và thư mục cần thiết

2. Cách Grep nhiều mẫu – Cú pháp

Cú pháp grep cơ bản khi tìm kiếm nhiều mẫu trong một tệp bao gồm sử dụng greplệnh theo sau là các chuỗi và tên của tệp hoặc đường dẫn của tệp.

Các mẫu cần được đặt trong dấu ngoặc đơn và được phân tách bằng ký hiệu đường ống. Sử dụng dấu gạch chéo ngược trước đường ống | cho các biểu thức thông thường.

Mã nguồn [Chọn]
grep 'pattern1\|pattern2' fileName_or_filePath
Cách mới nhất để sử dụng grep là với -E tùy chọn. Tùy chọn này coi mẫu bạn đã sử dụng là biểu thức chính quy mở rộng.

Mã nguồn [Chọn]
grep -E 'pattern1|pattern2' fileName_or_filePath
Phiên bản không dùng nữa của grep mở rộng là egrep.

Mã nguồn [Chọn]
egrep 'pattern1|pattern2' fileName_or_filePath
Một tùy chọn khác là thêm nhiều mẫu riêng biệt vào lệnh grep.

Để làm như vậy, hãy sử dụng cờ -e và tiếp tục thêm số mẫu tìm kiếm mong muốn:

Mã nguồn [Chọn]
grep -e pattern1 -e pattern2 fileName_or_filePath
3. Sự khác biệt giữa grep, grep -E và egrep là gì?

Lệnh này là phiên bản lỗi thời của grep mở rộng. Nó thực hiện chức năng tương tự như egrepgrep -E

Sự khác biệt giữa grep và grep mở rộng là grep mở rộng bao gồm các ký tự meta được thêm vào sau.

Các ký tự này là dấu ngoặc đơn (), dấu ngoặc nhọn {} và dấu chấm hỏi. nhân vật ống | cũng được coi là một ký tự meta trong grep mở rộng.

4. Ví dụ về việc sử dụng Grep cho nhiều chuỗi, mẫu và từ

Để đảm bảo bạn hiểu cách sử dụng grep để tìm kiếm nhiều chuỗi, chúng tôi khuyên bạn nên tạo một tệp có một số văn bản mà chúng tôi sẽ thử một vài trường hợp sử dụng khác nhau.

Trong trường hợp của chúng tôi, chúng tôi đặt tên tệp là sample.txt và thêm một vài đoạn văn bản. Chúng tôi đã lưu trữ tệp trong thư mục của người dùng thử nghiệm, nghĩa là trong /home/test/sample.txt

4.1. Cách Grep nhiều mẫu trong một tệp

Trong các ví dụ dưới đây, chúng tôi sẽ sử dụng grep thay vì grep mở rộng. Đừng quên sử dụng dấu gạch chéo ngược trước ký tự ống.

Vì grep không hỗ trợ biểu tượng đường ống làm toán tử luân phiên, nên bạn cần sử dụng ký tự thoát (dấu gạch chéo ngược \) để ra lệnh grepxử lý đường ống theo cách khác.

Ví dụ: để tìm kiếm các từ bổ sung và giá trị trong tệp sample.txt, hãy sử dụng lệnh này:

Mã nguồn [Chọn]
grep 'extra\|value' sample.txt
Đầu ra làm nổi bật chuỗi bạn muốn grep.


Nếu cùng một tệp nằm trong thư mục khác, bạn cần điều hướng đến thư mục đó hoặc sử dụng đường dẫn đầy đủ của tệp:

Mã nguồn [Chọn]
grep 'extra\|value' /home/test/Desktop/sample.txt
Để tìm kiếm nhiều hơn hai từ, hãy tiếp tục thêm chúng theo cách tương tự.

Ví dụ: để tìm kiếm ba từ, hãy thêm chuỗi ký tự mong muốn, theo sau là dấu gạch chéo ngược và dấu gạch ngang:

Mã nguồn [Chọn]
grep 'extra\|value\|service' sample.txt

Hãy xem lệnh grep ở trên trông như thế nào khi sử dụng grep -E, egrepvà grep -e:

Mã nguồn [Chọn]
grep -E 'extra|value|service' sample.txt

egrep 'extra|value|service' sample.txt

grep -e extra -e value -e service sample.txt

Chúng tôi sẽ sử dụng grep trong các ví dụ khác, nhưng bạn có thể sử dụng bất kỳ cú pháp nào bạn thích.

4.2. Tìm kiếm nhiều kết quả khớp chính xác trong một tệp

Nếu bạn muốn tìm kết quả khớp chính xác cho nhiều mẫu, hãy chuyển -w cờ cho greplệnh.

Mã nguồn [Chọn]
grep -w 'provide\|count' sample.txt
Ví dụ: kết quả bên dưới cho thấy sự khác biệt giữa tìm kiếm không có -w và có tìm kiếm:


Như bạn có thể thấy, kết quả là khác nhau. Lệnh đầu tiên hiển thị tất cả các dòng có chuỗi bạn đã sử dụng.

Lệnh thứ hai chỉ ra cách grep khớp chính xác cho nhiều chuỗi. Đầu ra chỉ in các dòng chứa các từ chính xác.

Lưu ý: Grep cung cấp nhiều chức năng. Tìm hiểu cách sử dụng grep cho các trường hợp sử dụng bổ sung.

4.3. Bỏ qua trường hợp khi sử dụng Grep cho nhiều chuỗi

Để tránh bỏ lỡ điều gì đó khi bạn tìm kiếm nhiều mẫu, hãy sử dụng -i cờ để bỏ qua trường hợp chữ cái.

Ví dụ: chúng tôi sẽ bỏ qua trường hợp với lệnh này:

Mã nguồn [Chọn]
grep -i 'phoenix\|linux' sample.txt

Đầu ra cho thấy hai lệnh khác nhau như thế nào. Nếu bạn bao gồm -i cờ và bỏ qua trường hợp chữ cái, kết quả cho nhiều kết quả phù hợp sẽ bao gồm tất cả các kết quả phù hợp.

Bằng cách này, bạn sẽ nhận được kết quả bổ sung. Nếu bạn cũng thêm -w cờ vào lệnh này, bạn có thể thu hẹp kết quả hơn nữa:


4.4. Hiển thị số lượng nhiều kết quả phù hợp trong một tệp

Giả sử bạn đang theo dõi một tệp nhật ký và bạn muốn xem liệu số lượng cảnh báo hoặc thông báo có tăng lên hay không. Bạn không muốn xem kết quả chi tiết khi một số lượng lớn các tkết quả phù hợp quay trở lại.

Ví dụ: để hiển thị số lượng nhiều kết quả phù hợp trong tệp bootstrap.log, hãy nhập:

Mã nguồn [Chọn]
grep -c 'warning\|error' /var/log/bootstrap.log

Đầu ra in số kết quả phù hợp. Bằng cách này, bạn có thể nhanh chóng xác định xem số lượng cảnh báo và lỗi có tăng lên hay không.

4.5. Grep cho nhiều mẫu trong một loại tệp cụ thể

Bạn chỉ có thể sử dụng grep để tìm kiếm nhiều chuỗi trong một loại tệp nhất định. Nếu bạn muốn theo dõi các tệp nhật ký trong một thư mục hoặc nếu bạn muốn tìm kiếm trong tất cả các tệp văn bản, hãy sử dụng dấu hoa thị và phần mở rộng tệp thay vì tên tệp.

Ví dụ: để tìm kiếm các cảnh báo và lỗi thông qua tất cả các tệp.log trong thư mục /var/log/, hãy nhập:

Mã nguồn [Chọn]
grep 'warning\|error' /var/log/*.log
Để minh họa rõ hơn cách hoạt động của tùy chọn này, chúng tôi sẽ chỉ hiển thị số lượng kết quả phù hợp.


Đầu ra hiển thị tất cả các tệp mà grep đã tìm kiếm các chuỗi bạn đã sử dụng.

Lưu ý: Nếu bạn nhận được thông báo "Quyền bị từ chối", như chúng tôi đã làm trong ví dụ trên, thì bạn cần có đặc quyền sudo. Để bao gồm tất cả các tệp, hãy sử dụng sudolệnh grep. Nhập mật khẩu sudo và grep sẽ tìm kiếm trong tất cả các tệp.

4.6. Tìm kiếm đệ quy nhiều mẫu trong một tệp

Lệnh grep tìm kiếm chỉ trong thư mục hiện tại khi bạn sử dụng ký tự đại diện dấu hoa thị.

Để bao gồm tất cả các thư mục con khi tìm kiếm nhiều mẫu, hãy thêm -R toán tử vào grep:

Mã nguồn [Chọn]
grep -R 'warning\|error' /var/log/*.log
Đầu ra sẽ trả về kết quả từ tất cả các tệp mà greplệnh tìm thấy trong thư mục /var/log/ và các thư mục con của nó.

Trong hướng dẫn này, bạn đã học cách sử dụng grep để tìm kiếm nhiều từ hoặc mẫu chuỗi trong một tệp. Hướng dẫn cũng chỉ cho bạn cách sử dụng grep mở rộng.

Các ví dụ trong bài viết này giúp bạn thực hành cách tinh chỉnh tìm kiếm grep của mình. Ngoài ra, hãy xem hướng dẫn grep regex của chúng tôi để tìm hiểu thêm.