Ví dụ sử dụng lệnh grep Linux

Giới thiệu

Lệnh grep Linux được sử dụng làm phương thức lọc đầu vào.

GREP là viết tắt của Global Regular Expression Printer và do đó để sử dụng nó hiệu quả, bạn nên có một số kiến ​​thức về các biểu thức chính quy.

Trong bài viết này, tôi sẽ cho bạn thấy một số ví dụ sẽ giúp bạn hiểu lệnh grep.

01/09

Làm thế nào để tìm kiếm một chuỗi trong một tập tin bằng cách sử dụng GREP

Lệnh grep Linux.

Hãy tưởng tượng bạn có một tệp văn bản được gọi là sách có tiêu đề sách của trẻ em sau đây:

Để tìm tất cả các sách có từ "The" trong tiêu đề, bạn sẽ sử dụng cú pháp sau:

grep Sách

Các kết quả sau sẽ được trả về:

Trong mỗi trường hợp, từ "The" sẽ được đánh dấu.

Lưu ý rằng tìm kiếm phân biệt chữ hoa chữ thường nên nếu một trong các tiêu đề có "the" thay vì "The" thì nó sẽ không được trả lại.

Để bỏ qua trường hợp, bạn có thể thêm công tắc sau đây:

grep các cuốn sách - signore-case

Bạn cũng có thể sử dụng nút chuyển đổi -i như sau:

grep -i sách

02/09

Tìm kiếm chuỗi ký tự trong tệp bằng cách sử dụng ký tự đại diện

Lệnh grep rất mạnh. Bạn có thể sử dụng nhiều kỹ thuật đối sánh mẫu để lọc kết quả.

Trong ví dụ này, tôi sẽ chỉ cho bạn cách tìm kiếm một chuỗi trong một tệp bằng cách sử dụng các ký tự đại diện .

Hãy tưởng tượng bạn có một tệp được gọi là các địa điểm có tên địa danh Scotland sau đây:

aberdeen

aberystwyth

aberlour

inverurie

inverness

newburgh

hươu mới

galloway mới

glasgow

edinburgh

Nếu bạn muốn tìm tất cả các địa điểm có inver trong tên, hãy sử dụng cú pháp sau:

grep inver * địa điểm

Ký tự đại diện dấu hoa thị (*) là 0 hoặc nhiều. Vì vậy nếu bạn có một nơi gọi là inver hoặc một nơi được gọi là inverness thì cả hai sẽ được trả lại.

Một ký tự đại diện khác mà bạn có thể sử dụng là dấu chấm (.). Bạn có thể sử dụng nó để khớp với một chữ cái duy nhất.

grep inver.r places

Lệnh trên sẽ tìm những nơi được gọi là inverurie và inverary nhưng sẽ không tìm thấy invereerie vì chỉ có thể có một ký tự đại diện giữa hai r được biểu thị bằng một dấu chấm đơn.

Ký tự đại diện kỳ ​​là hữu ích nhưng nó có thể gây ra vấn đề nếu bạn có một phần văn bản bạn đang tìm kiếm.

Ví dụ: xem danh sách các tên miền này

Để tìm tất cả about.com, bạn chỉ có thể tìm kiếm bằng cú pháp sau:

grep * về * tên miền

Lệnh trên sẽ rơi xuống nếu danh sách chứa tên sau trong đó:

Do đó, bạn có thể thử cú pháp sau:

grep * tên miền about.com

Điều này sẽ hoạt động tốt trừ khi có miền có tên sau:

aboutycom.com

Để thực sự tìm kiếm cụm từ about.com, bạn cần phải thoát khỏi dấu chấm như sau:

grep * về \ .com tên miền

Ký tự đại diện cuối cùng hiển thị cho bạn là dấu chấm hỏi viết tắt là 0 hoặc một ký tự.

Ví dụ:

grep? ber placenames

Lệnh trên sẽ trả về aberdeen, aberystwyth hoặc thậm chí là berwick.

03/09

Tìm kiếm chuỗi tại đầu và cuối dòng Sử dụng grep

Biểu tượng carat (^) và đô la ($) cho phép bạn tìm kiếm các mẫu ở đầu và cuối dòng.

Hãy tưởng tượng bạn có một tệp gọi là bóng đá với các tên nhóm sau:

Nếu bạn muốn tìm tất cả các đội đã bắt đầu với Manchester, bạn sẽ sử dụng cú pháp sau:

grep ^ Đội Manchester

Lệnh trên sẽ trả về Manchester City và Manchester United nhưng không phải là FC United Of Manchester.

Ngoài ra, bạn có thể tìm thấy tất cả các đội kết thúc với United bằng cú pháp sau:

grep United $ teams

Lệnh trên sẽ trả lại Manchester United và Newcastle United nhưng không phải là FC United Of Manchester.

04/09

Đếm số lượng các trận đấu sử dụng grep

Nếu bạn không muốn trả về các dòng thực tế khớp với mẫu bằng grep nhưng bạn chỉ muốn biết có bao nhiêu bạn có thể sử dụng cú pháp sau:

grep -c mẫu inputfile

Nếu mẫu được khớp hai lần thì số 2 sẽ được trả lại.

05/09

Tìm tất cả các điều khoản không phù hợp bằng grep

Hãy tưởng tượng bạn có danh sách tên địa điểm với các quốc gia được liệt kê như sau:

Bạn có thể nhận thấy rằng vịnh colwyn không có quốc gia nào liên kết với nó.

Để tìm kiếm tất cả các địa điểm có quốc gia, bạn có thể sử dụng cú pháp sau:

grep land $ địa điểm

Kết quả trả về sẽ là tất cả những nơi ngoại trừ vịnh colwyn.

Điều này rõ ràng chỉ hoạt động cho những nơi kết thúc trong đất (hầu như không có khoa học).

Bạn có thể đảo ngược lựa chọn bằng cú pháp sau:

grep -v land $ địa điểm

Điều này sẽ tìm thấy tất cả những nơi không kết thúc bằng đất liền.

06/09

Cách tìm dòng trống trong tệp bằng grep

Hãy tưởng tượng bạn có một tệp đầu vào được ứng dụng của bên thứ ba sử dụng để dừng đọc tệp khi tìm thấy dòng trống như sau:

Khi các ứng dụng được vào dòng sau khi liverpool nó sẽ ngừng đọc nghĩa là vịnh colwyn bị bỏ qua hoàn toàn.

Bạn có thể sử dụng grep để tìm kiếm các dòng trống bằng cú pháp sau:

grep ^ $ places

Thật không may điều này không đặc biệt hữu ích vì nó chỉ trả về các dòng trống.

Tất nhiên, bạn có thể đếm số lượng các dòng trống dưới dạng kiểm tra để xem tệp có hợp lệ như sau không:

grep -c ^ $ địa điểm

Tuy nhiên nó sẽ hữu ích hơn để biết số dòng có một dòng trống để bạn có thể thay thế chúng. Bạn có thể thực hiện điều đó bằng lệnh sau:

grep -n ^ $ địa điểm

07/09

Làm thế nào để tìm kiếm các chuỗi ký tự chữ hoa hoặc chữ thường sử dụng grep

Sử dụng grep bạn có thể xác định những dòng nào trong một tệp có các ký tự chữ hoa sử dụng cú pháp sau:

grep '[AZ]' tên tệp

Dấu ngoặc vuông [] cho phép bạn xác định phạm vi ký tự. Trong ví dụ trên, nó khớp với bất kỳ ký tự nào nằm giữa A và Z.

Do đó, để khớp các ký tự chữ thường, bạn có thể sử dụng cú pháp sau:

grep '[az]' tên tệp

Nếu bạn chỉ muốn đối sánh các chữ cái và không phải là chữ số hoặc các ký hiệu khác, bạn có thể sử dụng cú pháp sau:

grep '[a-zA-Z]' tên tệp

Bạn có thể làm tương tự với các con số như sau:

grep '[0-9]' tên tệp

08/09

Tìm kiếm các mẫu lặp lại bằng grep

Bạn có thể sử dụng dấu ngoặc nhọn {} để tìm kiếm mẫu lặp lại.

Hãy tưởng tượng bạn có một tập tin với số điện thoại như sau:

Bạn biết phần đầu tiên của số cần phải có ba chữ số và bạn muốn tìm các dòng không khớp với mẫu này.

Từ ví dụ trước, bạn biết rằng [0-9] trả về tất cả các số trong một tệp.

Trong trường hợp này, chúng ta muốn các dòng bắt đầu bằng ba số, theo sau là dấu nối (-). Bạn có thể làm điều đó với cú pháp sau:

grep "^ [0-9] [0-9] [0-9] -" số

Như chúng ta đã biết từ các ví dụ trước, carat (^) có nghĩa là dòng phải bắt đầu bằng mẫu sau.

[0-9] sẽ tìm kiếm bất kỳ số nào trong khoảng từ 0 đến 9. Vì số này được bao gồm ba lần, nó khớp với 3 số. Cuối cùng, có dấu gạch nối để biểu thị dấu gạch nối phải thành công ba số.

Bằng cách sử dụng dấu ngoặc nhọn, bạn có thể làm cho tìm kiếm nhỏ hơn như sau:

grep "^ [0-9] \ {3 \} -" số

Dấu gạch chéo thoát khỏi {khung sao cho nó hoạt động như một phần của cụm từ thông dụng nhưng về bản chất điều này nói là [0-9] {3} có nghĩa là bất kỳ số nào trong khoảng từ 0 đến 9 ba lần.

Các dấu ngoặc nhọn cũng có thể được sử dụng như sau:

{5,10}

{5,}

{5,10} nghĩa là ký tự được tìm kiếm phải được lặp lại ít nhất 5 lần nhưng không quá 10 trong khi {5,} có nghĩa là ký tự phải được lặp lại ít nhất 5 lần nhưng nó có thể nhiều hơn thế.

09/09

Sử dụng đầu ra từ các lệnh khác bằng grep

Vì vậy, đến nay chúng tôi đã xem xét phù hợp với mô hình trong các tệp riêng lẻ nhưng grep có thể sử dụng đầu ra từ các lệnh khác làm đầu vào cho khớp mẫu.

Một ví dụ tuyệt vời của việc này là sử dụng lệnh ps liệt kê các tiến trình đang hoạt động.

Ví dụ chạy lệnh sau:

ps -ef

Tất cả các tiến trình đang chạy trên hệ thống của bạn sẽ được hiển thị.

Bạn có thể sử dụng grep để tìm kiếm một quá trình chạy cụ thể như sau:

ps -ef | grep firefox

Tóm lược

Lệnh grep là một lệnh cơ bản của Linux và nó là một thứ đáng để học vì nó sẽ làm cho cuộc sống của bạn dễ dàng hơn nhiều khi tìm kiếm các tập tin và các quá trình khi sử dụng thiết bị đầu cuối.