Làm cách nào để bạn tìm kiếm một từ cụ thể trong một tệp trong tập lệnh shell?

Sử dụng grep, bạn có thể nhanh chóng tìm thấy văn bản khớp với biểu thức chính quy trong một tệp, một nhóm tệp hoặc văn bản đến từ stdin

Đã đăng. Ngày 23 tháng 9 năm 2022 . %t phút đọc . của Ricardo Gerardi (Sudoer, Mũ đỏ)

Hình ảnh

Làm cách nào để bạn tìm kiếm một từ cụ thể trong một tệp trong tập lệnh shell?

Ảnh của Alexander Andrews trên Bapt

Tìm kiếm các mẫu văn bản trong tệp hoặc luồng văn bản là một trong những nhiệm vụ phổ biến nhất mà bạn sẽ thực hiện trong sự nghiệp quản trị hệ thống của mình. Đây là một kỹ năng có giá trị cho phép bạn kiểm tra nhiều cấu hình hệ thống, phân tích dữ liệu, khắc phục sự cố nhật ký và thực hiện nhiều hoạt động khác

Đào tạo & Chứng nhận

  • Khám phá các lựa chọn đào tạo và chứng nhận
  • Thực hiện đánh giá kỹ năng sysadmin
  • Tìm hiểu về chứng nhận Red Hat Certified System Administrator (RHCSA)
  • Nhận bản dùng thử Đăng ký Red Hat Learning
  • Sách điện tử miễn phí. Học tập hiện đại cho công nghệ hiện đại

Cách phổ biến nhất để tìm văn bản trong hệ thống Linux là sử dụng tiện ích dòng lệnh

$ grep Port /etc/ssh/sshd_config
Port 22
#GatewayPorts no
9. Tiện ích này ban đầu được phát triển cho hệ điều hành Unix vào đầu những năm 1970. Grep đã phát triển qua nhiều năm và phiên bản phổ biến nhất hiện nay dành cho Linux, GNU grep, có các tính năng bổ sung như đầu ra có màu. Tuy nhiên, chức năng chính của nó vẫn giống nhau

Sử dụng

$ grep Port /etc/ssh/sshd_config
Port 22
#GatewayPorts no
9, bạn có thể nhanh chóng tìm thấy văn bản khớp với biểu thức chính quy trong một tệp, một nhóm tệp hoặc văn bản đến từ
$ grep ^Port /etc/ssh/sshd_config
Port 22
1 bằng cách sử dụng toán tử shell pipe

Bài viết này trình bày cách sử dụng lệnh

$ grep Port /etc/ssh/sshd_config
Port 22
#GatewayPorts no
9 để tìm văn bản

Tìm văn bản trong một tập tin

Cách cơ bản nhất để sử dụng

$ grep Port /etc/ssh/sshd_config
Port 22
#GatewayPorts no
9 là tìm kiếm văn bản trong một tệp. Để thực hiện việc này, hãy nhập
$ grep Port /etc/ssh/sshd_config
Port 22
#GatewayPorts no
9, sau đó là mẫu văn bản cần tìm và tên tệp cần tìm. Ví dụ: để tìm cổng mà trình nền Secure Shell (SSH) sử dụng, hãy tìm kiếm
$ grep ^Port /etc/ssh/sshd_config
Port 22
3 trong tệp
$ grep ^Port /etc/ssh/sshd_config
Port 22
4

$ grep Port /etc/ssh/sshd_config
Port 22
#GatewayPorts no

Lưu ý rằng

$ grep Port /etc/ssh/sshd_config
Port 22
#GatewayPorts no
9 tìm thấy tất cả các dòng khớp với mẫu văn bản bất kể vị trí của mẫu

[ Tải xuống bảng cheat lệnh grep của Linux. ]

Mở rộng grep với các biểu thức chính quy

Trong ví dụ trước, khi bạn tìm kiếm

$ grep ^Port /etc/ssh/sshd_config
Port 22
3 trong tệp cấu hình SSH,
$ grep Port /etc/ssh/sshd_config
Port 22
#GatewayPorts no
9 trả về hai dòng. Dòng bạn đang tìm kiếm, Cổng 22 và một dòng bổ sung chứa mẫu tìm kiếm. Trong một số trường hợp, đó chính xác là những gì bạn muốn. Trong các trường hợp khác,
$ grep Port /etc/ssh/sshd_config
Port 22
#GatewayPorts no
9 có thể tìm thấy quá nhiều mục mà bạn không quan tâm, yêu cầu bạn phải sắp xếp chúng để tìm thông tin mong muốn

Để tránh điều đó, bạn có thể sử dụng cụm từ thông dụng để cụ thể hơn về những gì bạn đang tìm kiếm. Ví dụ: để chỉ tìm các dòng bắt đầu bằng từ

$ grep ^Port /etc/ssh/sshd_config
Port 22
3, bạn có thể sử dụng toán tử biểu thức chính quy
$ grep -E "Port [1-9]+" /etc/ssh/sshd_config
Port 22
0, như thế này

$ grep ^Port /etc/ssh/sshd_config
Port 22

Hình ảnh

Làm cách nào để bạn tìm kiếm một từ cụ thể trong một tệp trong tập lệnh shell?

Tải ngay

Lần này,

$ grep Port /etc/ssh/sshd_config
Port 22
#GatewayPorts no
9 chỉ trả về dòng bắt đầu bằng
$ grep ^Port /etc/ssh/sshd_config
Port 22
3 vì ở dòng thứ hai, biểu thức
$ grep ^Port /etc/ssh/sshd_config
Port 22
3 nằm ở giữa

Bạn cũng có thể sử dụng các biểu thức chính quy mở rộng với tham số dòng lệnh

$ grep -E "Port [1-9]+" /etc/ssh/sshd_config
Port 22
4. Ví dụ: để tìm kiếm một mẫu có chứa từ
$ grep ^Port /etc/ssh/sshd_config
Port 22
3 theo sau là các số, hãy sử dụng biểu thức chính quy này

$ grep -E "Port [1-9]+" /etc/ssh/sshd_config
Port 22

Bạn cũng có thể tìm các dòng kết thúc bằng một mẫu văn bản bằng cách sử dụng toán tử

$ grep -E "Port [1-9]+" /etc/ssh/sshd_config
Port 22
6. Ví dụ: để tìm tất cả các dòng kết thúc bằng
$ grep -E "Port [1-9]+" /etc/ssh/sshd_config
Port 22
7 trong
$ grep -E "Port [1-9]+" /etc/ssh/sshd_config
Port 22
8, hãy sử dụng
$ grep Port /etc/ssh/sshd_config
Port 22
#GatewayPorts no
9 như thế này

$ grep ^Port /etc/ssh/sshd_config
Port 22
5

Cụm từ thông dụng là một phần quan trọng của

$ grep Port /etc/ssh/sshd_config
Port 22
#GatewayPorts no
9, làm cho nó trở nên mạnh mẽ và linh hoạt. Tuy nhiên, biểu thức chính quy là một chủ đề lớn. Để biết thêm thông tin, hãy xem Biểu thức chính quy trên Wikipedia hoặc Biểu thức chính quy 101

Tìm văn bản trong nhiều tệp và thư mục

Tương tự như tìm mẫu văn bản trong một tệp, bạn có thể sử dụng

$ grep Port /etc/ssh/sshd_config
Port 22
#GatewayPorts no
9 để tìm văn bản trong nhiều tệp hoặc thư mục. Để tìm văn bản trong nhiều tệp đồng thời, hãy chỉ định tệp sẽ tìm kiếm sau tên tệp đầu tiên hoặc sử dụng ký tự đại diện trình bao, chẳng hạn như
$ grep ^Port /etc/ssh/sshd_config
Port 22
52 cho tất cả các tệp. Ví dụ: để tìm kiếm cấu hình trong hai tệp

$ grep ^Port /etc/ssh/sshd_config
Port 22
7

Khi bạn sử dụng nhiều tệp,

$ grep Port /etc/ssh/sshd_config
Port 22
#GatewayPorts no
9 sẽ hiển thị tên của tệp mà nó tìm thấy kết quả khớp trước khi hiển thị dòng khớp

[ Giữ các lệnh được sử dụng phổ biến nhất của bạn tiện dụng với bảng cheat lệnh Linux. ]

Để chạy tìm kiếm đệ quy trong nhiều thư mục con, hãy sử dụng cờ dòng lệnh

$ grep ^Port /etc/ssh/sshd_config
Port 22
54

$ grep ^Port /etc/ssh/sshd_config
Port 22
9

Lệnh

$ grep Port /etc/ssh/sshd_config
Port 22
#GatewayPorts no
9 nhanh và trả về kết quả nhanh, nhưng có thể mất nhiều thời gian nếu bạn chỉ định quá nhiều tệp hoặc thư mục con để tìm kiếm

Tìm văn bản trong đầu ra của lệnh khác

Tương tự như các tiện ích Unix khác,

$ grep Port /etc/ssh/sshd_config
Port 22
#GatewayPorts no
9 cũng hoạt động trên
$ grep ^Port /etc/ssh/sshd_config
Port 22
1 khi bạn đưa đầu ra của một lệnh khác vào đó. Đây là một cách nhanh chóng và hữu ích để lọc đầu ra của lệnh để khớp với mẫu văn bản mà bạn đang tìm kiếm

Ví dụ: nếu bạn muốn kiểm tra xem gói

$ grep ^Port /etc/ssh/sshd_config
Port 22
58 đã được cài đặt trong hệ điều hành Fedora hoặc Red Hat Enterprise Linux (RHEL) hay chưa, bạn có thể chuyển đầu ra của lệnh
$ grep ^Port /etc/ssh/sshd_config
Port 22
59, liệt kê tất cả các gói đã cài đặt, thành
$ grep Port /etc/ssh/sshd_config
Port 22
#GatewayPorts no
9 để tìm kiếm mẫu

$ grep Port /etc/ssh/sshd_config
Port 22
#GatewayPorts no
2

Bạn có thể lọc các đầu ra lệnh dài bằng

$ grep Port /etc/ssh/sshd_config
Port 22
#GatewayPorts no
9, giúp việc tìm kiếm thông tin hữu ích dễ dàng hơn

[ Nhận hướng dẫn cài đặt ứng dụng trên Linux. ]

Tùy chọn hữu ích bổ sung

Lệnh

$ grep Port /etc/ssh/sshd_config
Port 22
#GatewayPorts no
9 cung cấp nhiều tùy chọn để thay đổi cách nó tìm kiếm các mẫu hoặc hiển thị kết quả. Cho đến nay trong bài viết này, bạn đã nhìn thấy một số trong số họ. Mặc dù tôi không thể liệt kê tất cả các tùy chọn, đây là một số ví dụ hữu ích khác

  • Thêm tài nguyên Linux

    • Bảng cheat lệnh Linux nâng cao
    • Tải xuống RHEL 9 miễn phí thông qua chương trình Red Hat Developer
    • Hướng dẫn cài đặt ứng dụng trên Linux
    • Đánh giá kỹ năng quản trị hệ thống Linux

    Sử dụng tùy chọn
    $ grep ^Port /etc/ssh/sshd_config
    Port 22
    73 để tìm kiếm không phân biệt chữ hoa chữ thường
  • Sử dụng tùy chọn
    $ grep ^Port /etc/ssh/sshd_config
    Port 22
    74 để đảo ngược các dòng tìm kiếm và hiển thị không khớp với mẫu
  • Sử dụng tùy chọn
    $ grep ^Port /etc/ssh/sshd_config
    Port 22
    75 để chỉ tìm kiếm toàn bộ từ thay vì các mẫu ở giữa các từ khác
  • Sử dụng tùy chọn
    $ grep ^Port /etc/ssh/sshd_config
    Port 22
    76 cho đầu ra có màu, giúp dễ dàng phát hiện mẫu phù hợp hơn

Để biết danh sách đầy đủ các tùy chọn

$ grep Port /etc/ssh/sshd_config
Port 22
#GatewayPorts no
9, hãy tham khảo các trang hướng dẫn

Cái gì tiếp theo?

Tiện ích grep của GNU rất linh hoạt và hữu ích, giúp bạn hoàn thành nhiều nhiệm vụ trong các hoạt động quản trị hệ thống hàng ngày của mình. Bạn càng sử dụng

$ grep Port /etc/ssh/sshd_config
Port 22
#GatewayPorts no
9 nhiều, bạn sẽ càng cảm thấy thoải mái hơn và chẳng mấy chốc bạn sẽ nhận thấy mình luôn dựa vào nó

Để biết thêm thông tin về

$ grep Port /etc/ssh/sshd_config
Port 22
#GatewayPorts no
9, hãy xem một số liên kết này

  • Cách sử dụng grup
  • Bảng cheat lệnh grep Linux
  • tiếng anh wiki
  • Hướng dẫn Grep tại GNU

Bạn cũng có thể tìm thêm thông tin về

$ grep Port /etc/ssh/sshd_config
Port 22
#GatewayPorts no
9 trong hệ thống Linux của mình bằng cách sử dụng
$ grep ^Port /etc/ssh/sshd_config
Port 22
91 hoặc các ví dụ nhanh, có giá trị bằng công cụ
$ grep ^Port /etc/ssh/sshd_config
Port 22
92

Xem các bài viết liên quan này trên Enable Sysadmin

Hình ảnh

Làm cách nào để bạn tìm kiếm một từ cụ thể trong một tệp trong tập lệnh shell?

Hướng dẫn cho người mới bắt đầu về tmux

Làm cho thiết bị đầu cuối Linux của bạn trở nên hữu ích hơn với tmux, bộ ghép kênh đầu cuối cho phép bạn chạy nhiều chương trình Linux qua một kết nối

Đã đăng. Ngày 13 tháng 9 năm 2022

Tác giả. Ricardo Gerardi (Sudoer, Mũ đỏ)

Hình ảnh

Làm cách nào để bạn tìm kiếm một từ cụ thể trong một tệp trong tập lệnh shell?

Thả các trang man cho lệnh Linux này

Lệnh gian lận Linux cho phép bạn tra cứu các cờ và đối số dòng lệnh phổ biến một cách nhanh chóng mà không cần rời khỏi CLI

Đã đăng. Ngày 2 tháng 9 năm 2022

Tác giả. Anthony Critelli (Sudoer)

Hình ảnh

Làm cách nào để bạn tìm kiếm một từ cụ thể trong một tệp trong tập lệnh shell?

Cách định cấu hình tên máy chủ trên hệ thống Linux

Giúp truy cập máy tính Linux của bạn dễ dàng hơn bằng cách đặt tên thân thiện với con người, dễ sử dụng hơn địa chỉ IP

Đã đăng. Ngày 17 tháng 8 năm 2022

Tác giả. Shiwani Biradar (Sudoer, Mũ đỏ)

chủ đề. Linux   Chứng nhận

Làm cách nào để bạn tìm kiếm một từ cụ thể trong một tệp trong tập lệnh shell?

Ricardo Gerardi

Ricardo Gerardi là Chuyên gia tư vấn cấp cao tại Red Hat Canada, nơi ông chuyên về tự động hóa CNTT với Ansible và OpenShift. Thêm về tôi

Hội nghị thượng đỉnh mũ đỏ 2022. theo yêu cầu

Nhận thông tin mới nhất về Ansible, Red Hat Enterprise Linux, OpenShift, v.v. từ sự kiện ảo theo yêu cầu của chúng tôi

Đăng kí miễn phí

Nội dung liên quan

Hình ảnh

Làm cách nào để bạn tìm kiếm một từ cụ thể trong một tệp trong tập lệnh shell?

10 bài hướng dẫn học lấy chứng chỉ RHCSA năm 2023

Thêm huy hiệu Red Hat Certified System Administrator (RHCSA) vào sơ yếu lý lịch của bạn với sự trợ giúp của các hướng dẫn nghiên cứu này

Đã đăng. Ngày 27 tháng 12 năm 2022

Tác giả. Roberto Nozaki (Sudoer, Mũ đỏ)

Hình ảnh

Làm cách nào để bạn tìm kiếm một từ cụ thể trong một tệp trong tập lệnh shell?

Cách lên lịch công việc bằng tiện ích 'cron' của Linux

Lên lịch cho task chạy tự động vào những thời điểm cụ thể là kiến ​​thức cần thiết cho bất kỳ sysadmin nào

Đã đăng. Ngày 15 tháng 12 năm 2022

Tác giả. Alexon Oliveira (Sudoer, Mũ đỏ)

Hình ảnh

Làm cách nào để bạn tìm kiếm một từ cụ thể trong một tệp trong tập lệnh shell?

Tìm hiểu cách Unix ảnh hưởng đến Linux, hiểu các danh sách và từ điển Ansible và các mẹo khác dành cho quản trị viên hệ thống

Làm cách nào để tìm kiếm một chuỗi trong tệp bằng shell script?

Sử dụng lệnh grep . Cấu trúc cơ bản của nó chỉ là chuỗi grep file_name. Lệnh grep ở trên in tất cả các dòng có chứa từ “tốt hơn”

Lệnh nào được sử dụng để tìm kiếm một văn bản cụ thể từ một tệp?

Để mở ngăn Tìm kiếm từ Chế độ xem Chỉnh sửa, nhấn Ctrl+F hoặc nhấp vào Trang chủ > Tìm. Tìm văn bản bằng cách nhập văn bản đó vào Tìm kiếm tài liệu cho…