Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Lập Trình Bash

Thành thạo Grep: Tìm kiếm nhiều từ, chuỗi, và pattern dễ dàng

Hướng dẫn này giải thích cách dùng tiện ích grep để tìm kiếm nhiều từ, chuỗi, và pattern. Bạn có thể tìm ví dụ đầy đủ các lệnh dùng để thực hiện việc này bên dưới.

Grep là gì?

Khi chúng ta nói đến grep, chúng ta đang nói về hàm dòng lệnh. Grep viết tắt của Global Regular Expression Print. Về cơ bản, nó sẽ tìm kiếm file input tìm dòng khớp với một regular expression nhất định. Sau đó trả về kết quả bằng cách ghi mỗi dòng cho standard output.

Tiện ích grep phù hợp với ba cú pháp biểu thức. Chúng có thể chỉ định là Basic, Extended hoặc Perl-compatible. Nếu không chỉ định cú pháp regular expression, grep GNY sẽ đặt pattern tìm kiếm là basic expressions.

Grep cho nhiều Pattern

Nếu bạn muốn tìm kiếm nhiều pattern, bạn có thể dùng toán tử OR, gọi là toán tử thay thế. Toán tử/pipe này trông như: |

Nó cho phép người dùng chỉ định tất cả các match tiềm năng, चाहे chúng là tập biểu thức hoặc chuỗi literal. Vì vậy, để tìm kiếm nhiều pattern, input sẽ là:

$ grep 'first pattern\|second pattern' filename

‘first pattern‘ và ‘second pattern‘ sẽ được thay bằng pattern tiềm năng bạn đang tìm. Biểu thức chính quy này – ‘first pattern\|second pattern‘ – luôn phải đặt trong ngoặc đơn. Ký hiệu pipe không được hỗ trợ như toán tử thay thế và do đó ký tự thoát (backslash) được yêu cầu để bảo grep hiểu pipe khác.

Để chỉ định pattern dự định là extended regular expression, ‘-e‘ hoặc ‘—extended-regexp‘ có thể dùng. Ví dụ:

$ grep -E 'first pattern|second pattern' filename

Trong extended regex, bạn không cần thoát pipe.

Bạn có thể tìm theo file, nên tìm pattern trong presentation.txt có thể trông như:

$ grep -E 'first pattern|second pattern' presentation.txt

Output sẽ hiển thị chuỗi bạn muốn grep được highlight.

Nếu file bạn tìm nằm trong thư mục khác, bạn cần bảo grep tìm trong thư mục cụ thể đó bằng đường dẫn file đầy đủ. Ví dụ:

$ grep -E 'first pattern|second pattern' /home/presentation.txt

Grep cho nhiều Chuỗi (Strings)

Pattern cơ bản nhất là chuỗi literal. Để tìm nhiều chuỗi, bạn nhập chúng sau lệnh grep. Giả sử chúng ta tìm ‘one‘, ‘two‘, và ‘three‘. Nó có thể trông như:

$ grep 'one\|two\|three'

Theo sau command đó bằng file bạn đang tìm. Nếu bạn tìm dùng extended regular expression, bạn về cơ bản bỏ ‘\‘. Ví dụ:

$ grep -E 'one|two|three'

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

Lệnh ‘grep’ phân biệt chữ hoa/thường. Để bỏ qua chữ hoa/thường, gọi với tùy chọn ‘-i‘ hoặc ‘—ignore-case‘. Ví dụ:

$ grep -i 'one\|two\|three'

Hiển thị số lượng nhiều match

Nếu bạn đang trong file log và muốn biết số lượng cảnh báo và lỗi có tăng không, nhưng không xem kết quả chi tiết, bạn có thể dùng ‘-c‘. Để đếm nhiều match trong file myapp.log, nó có thể trông như:

grep -c 'one\|two\|three' /var/log/myapp.log

Grep nhiều Pattern trong loại File cụ thể

Nhiều chuỗi có thể tìm trong loại file nhất định. Điều này cho phép bạn tìm, ví dụ, tất cả file text hoặc tất cả logfile trong một thư mục. Dùng asterisk với extension file thay vì tên file sẽ chỉ dẫn grep. Dùng ví dụ trên cho thông báo lỗi, xem qua tất cả file log có thể trông như:

grep -c 'one\|two\|three' /var/log/*.log

Tìm kiếm đệ quy cho nhiều Match

Dùng grep sẽ chỉ tìm trong thư mục hiện tại với asterisk đang dùng. Nếu bạn cần bao gồm tất cả thư mục con, tùy chọn ‘-R’ có thể dùng:

grep -R 'one\|two\|three' /var/log/*.log

Điều này sẽ trả về kết quả cho tất cả file tìm thấy trong thư mục var/log/ chỉ định và thư mục con.

Dùng grep cho Match chính xác

Lệnh ‘grep’ sẽ hiển thị tất cả kết quả nơi chuỗi cũng được nhúng và không chỉ match chính xác. Ví dụ, khi tìm ‘value’ nó sẽ in dòng bao gồm ‘values’ và ‘valued’ cũng. Nếu bạn muốn trả về dòng chỉ có match chính xác của toàn bộ từ, bạn có thể dùng ‘-w‘ hoặc ‘—word-regexp‘. Điều này có thể trông như sau nếu bạn tìm match chính xác của ‘one‘, ‘two‘, và ‘three‘:

$ grep -w 'one\|two\|three'

Ký tự từ bao gồm chữ số, nên 0-9 và a-z cộng thêm ký tự gạch dưới. Những ký tự khác được coi là non-word characters.