12 ví dụ lệnh grep trong CentOS / Ubuntu / Debian / Fedora

$ sudo apt install grep         [On Debian, Ubuntu and Mint]
$ sudo yum install grep         [On RHEL/CentOS/Fedora and Rocky Linux/AlmaLinux]
$ sudo emerge -a sys-apps/grep  [On Gentoo Linux]
$ sudo apk add grep             [On Alpine Linux]
$ sudo pacman -S grep           [On Arch Linux]
$ sudo zypper install grep      [On OpenSUSE]    

Để có thể vận dụng thành thục lệnh grep trong Linux bạn cần thực hành và vận dụng nhiều. Hãy cùng đến với 12 ví dụ điển hình sau nhé.

12 ứng dụng của lệnh grep trong Linux

Tìm kiếm và tìm tệp tin 

Giả sử bạn vừa cài đặt một bản sao mới của Ubuntu trên máy tính của bạn và bạn muốn thử viết kịch bản Python.

Bạn đã tìm kiếm trên web nhưng bạn nhận thấy có hai phiên bản Python khác nhau được sử dụng và bạn không biết phiên bản Python nào được cài đặt trên Ubuntu bởi trình cài đặt, hoặc liệu nó đã cài đặt các module nào hay chưa.

Đơn giản chỉ cần chạy lệnh dpkg sau đây với grep như được hiển thị:

# dpkg -l | grep -i python

Tìm tệp tin bằng lệnh grep:

ii  libpython3-stdlib:amd64                    3.8.2-0ubuntu2                      amd64        interactive high-level object-oriented language (default python3 version)
ii  libpython3.8:amd64                         3.8.10-0ubuntu1~20.04.5             amd64        Shared Python runtime library (version 3.8)
ii  libpython3.8-minimal:amd64                 3.8.10-0ubuntu1~20.04.5             amd64        Minimal subset of the Python language (version 3.8)
ii  libpython3.8-stdlib:amd64                  3.8.10-0ubuntu1~20.04.5             amd64        Interactive high-level object-oriented language (standard library, version 3.8)
ii  python-apt-common                          2.0.0ubuntu0.20.04.8                all          Python interface to libapt-pkg (locales)
ii  python3                                    3.8.2-0ubuntu2                      amd64        interactive high-level object-oriented language (default python3 version)
ii  python3-apport                             2.20.11-0ubuntu27.24                all          Python 3 library for Apport crash report handling
ii  python3-apt                                2.0.0ubuntu0.20.04.8                amd64        Python 3 interface to libapt-pkg
ii  python3-aptdaemon                          1.1.1+bzr982-0ubuntu32.3            all          Python 3 modules for the server and client of aptdaemon
ii  python3-aptdaemon.gtk3widgets              1.1.1+bzr982-0ubuntu32.3            all          Python 3 GTK+ 3 widgets to run an aptdaemon client
ii  python3-blinker                            1.4+dfsg1-0.3ubuntu1                all          fast, simple object-to-object and broadcast signaling library
ii  python3-brlapi:amd64                       6.0+dfsg-4ubuntu6                   amd64        Braille display access via BRLTTY - Python3 bindings

Trước tiên, chúng ta chạy dpkg -l, lệnh này liệt kê các gói *.deb đã được cài đặt trên hệ thống của bạn. Tiếp theo, chúng ta chuyển dữ liệu đầu ra đến grep -i python, điều này đơn giản chỉ định "đi đến grep và lọc và trả về mọi thứ có chứa 'python'".

Tùy chọn -i được sử dụng để bỏ qua việc phân biệt chữ hoa chữ thường, vì grep phân biệt chữ hoa chữ thường. Sử dụng tùy chọn -i là một thói quen tốt, trừ khi bạn đang cố gắng tìm kiếm cụ thể hơn.

Tìm kiếm và lọc tệp

Lệnh grep trong Linux cũng có thể được sử dụng để tìm kiếm và lọc trong các tệp tin riêng lẻ hoặc nhiều tệp tin. Bạn đang gặp một số vấn đề với máy chủ web Apache của mình và bạn đã liên hệ với một diễn đàn tuyệt vời trên mạng để xin trợ giúp.

Người bạn tốt bụng trả lời bạn đã yêu cầu bạn đăng nội dung của tệp /etc/apache2/apache2.conf. Điều này sẽ dễ dàng hơn cho bạn, người đang giúp bạn và tất cả mọi người đang đọc nếu bạn có thể loại bỏ tất cả các dòng chú thích phải không? Bạn hoàn toàn có thể làm điều đó! Chỉ cần chạy lệnh sau:

# grep -v ^\# /etc/apache2/apache2.conf | grep  .

Tùy chọn -v cho biết cho grep làm ngược lại đầu ra của nó, có nghĩa là thay vì in ra các dòng khớp, nó sẽ in ra tất cả các dòng không khớp với biểu thức, trong trường hợp này là các dòng được chú thích bằng dấu #.

Lưu ý rằng chúng tôi cũng sử dụng grep . ở cuối để ẩn đầu ra của tất cả các dòng trống. Điều này giúp chúng tôi chỉ nhìn thấy các cài đặt cấu hình trong cửa sổ terminal. In nội dung tệp bằng cách loại trừ nhận xét và dòng trống:

DefaultRuntimeDir ${APACHE_RUN_DIR}
PidFile ${APACHE_PID_FILE}
Timeout 300
KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 5
User ${APACHE_RUN_USER}
Group ${APACHE_RUN_GROUP}
HostnameLookups Off
ErrorLog ${APACHE_LOG_DIR}/error.log
LogLevel warn
IncludeOptional mods-enabled/*.load
IncludeOptional mods-enabled/*.conf
Include ports.conf
<Directory />
Options FollowSymLinks
AllowOverride None
Require all denied
</Directory>

Tìm tất cả các tệp .mp3

Các lệnh grep có thể rất hữu ích để lọc từ đầu ra chuẩn (stdout). Ví dụ, giả sử bạn có một thư mục chứa nhiều tệp âm nhạc trong nhiều định dạng khác nhau.

Bạn muốn tìm tất cả các tệp *.mp3 từ nghệ sĩ JayZ, nhưng không muốn có bất kỳ bản remix nào. Sử dụng lệnh find với một vài ống grep sẽ giải quyết được vấn đề này.

# find . –name “*.mp3” | grep –i JayZ | grep –vi “remix”

Trong ví dụ này, chúng ta sử dụng lệnh find để in ra tất cả các tệp có phần mở rộng *.mp3, sau đó đưa kết quả đó qua ống grep -i để lọc và in ra tất cả các tệp có tên là "JayZ", và tiếp theo là ống grep -vi để lọc và không in ra tất cả các tên tệp chứa chuỗi (bất kể chữ hoa chữ thường) "remix".

Hiển thị số dòng trước hoặc sau chuỗi tìm kiếm

Một cặp tùy chọn khác là -A và -B, cho phép hiển thị dòng chứa chuỗi tìm kiếm và số dòng trước hoặc sau chuỗi tìm kiếm.

Để dễ nhớ, bạn hãy mặc định –A= after và –B= before:

# ifconfig | grep -A 4 inet
# ifconfig | grep -B 2 UP

Tìm hiểu về 12 ví dụ ứng dụng của lệnh grep trong Linux

In số dòng trước và sau chuỗi

Hiển thị số dòng trước và sau chuỗi tìm kiếm

Tùy chọn -C (hoặc --context) trong lệnh grep tương tự, nhưng thay vì in ra các dòng trước hoặc sau chuỗi tìm kiếm, nó in ra các dòng trong cả hai hướng.

# ifconfig | grep -C 2 lo

 TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 15314  bytes 1593769 (1.5 MB)
        RX errors 0  dropped 0  overruns 0  frame 0

Đếm số lần xuất hiện của các kết quả tìm kiếm (matches)

Tương tự như việc sử dụng ống nối (pipe) để đưa chuỗi tìm kiếm của grep vào lệnh word count (wc), grep cung cấp một tùy chọn tích hợp để thực hiện công việc tương tự.

# ifconfig | grep -c inet6

Tìm kiếm các tệp tin theo chuỗi đã cho trong Linux

Tùy chọn -n của lệnh grep trong Linux rất hữu ích khi gỡ lỗi các tệp tin trong quá trình biên dịch. Nó hiển thị số dòng trong tệp tin của chuỗi tìm kiếm đã cho. Dưới đây là ví dụ về cách sử dụng tùy chọn -n trong lệnh grep:

# grep -n "main" setup.py

Tìm kiếm một chuỗi trong tất cả các thư mục và các tệp tin con một cách đệ quy

Nếu bạn muốn tìm kiếm một chuỗi trong thư mục hiện tại cùng với tất cả các thư mục con, bạn có thể sử dụng tùy chọn -r để tìm kiếm đệ quy. Dưới đây là cú pháp của lệnh:

# grep -r “function” *

Tìm kiếm một mẫu hoàn chỉnh (toàn bộ pattern)

Sử dụng tùy chọn -w trong lệnh grep sẽ tìm kiếm toàn bộ mẫu (pattern) trong chuỗi. Ví dụ, sử dụng:

# ifconfig | grep -w "RUNNING"

Sẽ in ra dòng chứa mẫu (pattern) được đặt trong dấu nháy kép. Tuy nhiên, nếu bạn thử:

# ifconfig | grep -w "RUN"

Tìm hiểu về 12 ví dụ ứng dụng của lệnh grep trong Linux

Tìm toàn bộ mẫu

Không có gì được trả về vì chúng ta không tìm kiếm một mẫu (pattern), mà là một từ hoàn chỉnh.

Tìm kiếm một chuỗi trong các tệp được nén gzip (.gz)

Một công cụ quan trọng là zgrep, tương tự như zcat, được sử dụng trên các tệp được nén gzip. Nó sử dụng các tùy chọn tương tự như grep và được sử dụng theo cách tương tự. Ví dụ:

# zgrep -i error /var/log/syslog.2.gz

Tìm hiểu về 12 ví dụ ứng dụng của lệnh grep trong Linux

Chuỗi tìm kiếm trong tệp Gzipped

Tìm kiếm và khớp các biểu thức chính quy trong các tệp

Lệnh egrep là một phần mở rộng khác của grep và có ý nghĩa là "Extended Global Regular Expression". Nó nhận biết các meta-kí tự bổ sung trong biểu thức chính quy như + ? | và ().

egrep rất hữu ích khi tìm kiếm trong các tệp nguồn và các đoạn mã khác khi cần thiết. Nó có thể được gọi từ lệnh grep thông thường bằng cách chỉ định tùy chọn -E.

# grep -E

Tìm kiếm chuỗi mẫu cố định

Lệnh fgrep tìm kiếm một chuỗi mẫu cố định trong một tệp hoặc danh sách tệp. Nó tương đương với grep -F. Một cách thông thường để sử dụng fgrep là chuyển một tệp chứa các mẫu cho nó.

# fgrep –f file_full_of_patterns.txt file_to_search.txt

Điều này chỉ là một điểm khởi đầu với lệnh grep trong Linux, nhưng như bạn đã nhìn thấy, nó vô giá trị cho nhiều mục đích khác nhau. Ngoài các lệnh đơn giản một dòng mà chúng ta đã triển khai, grep có thể được sử dụng để viết các tác vụ cron mạnh mẽ và các kịch bản shell.

Mọi người cũng tìm kiếm: grep, grep ubuntu, lệnh grep trong linux, bạn đã biết cách sử dụng lệnh grep trong linux hay chưa mobiwork, ubuntu grep, grep trong linux, grep linux

Mọi người cùng tìm kiếm: bạn đã biết cách sử dụng lệnh grep trong linux hay chưa mobiwork, grep centos, grep debian