12 практически примера за команда Linux Grep

Сподели

Сблъсквали ли сте се някога със задачата да търсите конкретен низ или шаблон във файл, но нямате представа откъде да започнете да търсите? Добре тогава, ето го grep на помощ!

grep е мощна програма за търсене на шаблони на файлове, която се предлага във всяка дистрибуция на Linux. Ако по някаква причина не е инсталиран на вашата система, можете лесно да го инсталирате чрез вашия мениджър на пакети, както е показано.

$ 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]    

Открих, че най-лесният начин да намокрите краката си с grep команда е просто да се потопите направо и да използвате някои примери от реалния свят.

1. Търсене и намиране на файлове в Linux

Да приемем, че току-що сте инсталирали ново копие на новото Ubuntu на вашата машина и които ще дадете Python сценарий за изстрел.

Търсите уроци в мрежата, но виждате, че има две различни версии на Python в употреба и не знаете коя версия на Python е инсталирана на Ubuntu от инсталатора или дали е инсталирал някакви модули.

Просто изпълнете следната команда dpkg с grep както е показано:

# dpkg -l | grep -i python
Намиране на файлове с команда 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
...

Първо тичахме dpkg –lкойто изброява инсталираните *.deb пакети във вашата система. Второ, пренасочихме този изход към grep –i python, който просто заявява „отидете на grep и филтрирайте и върнете всичко с ‘питон‘ в него.”

The –i има опция за игнориране на главни и малки букви, като grep е чувствителен към главни и малки букви. Използвайки –i опция е добър навик, освен ако, разбира се, не се опитвате да определите по-конкретно търсене.

2. Търсете и филтрирайте файлове в Linux

The grep може също да се използва за търсене и филтриране в отделни файлове или множество файлове. Да вземем този сценарий:

Имате проблеми с вашия Apache уеб сървъри сте се свързали с един от многото страхотни форуми в мрежата с молба за помощ.

Добрата душа, която ви отговаря, ви помоли да публикувате съдържанието на вашия /etc/apache2/apache2.conf файл. Няма ли да е по-лесно за вас, за човека, който ви помага, и за всички, които го четат, ако можете да премахнете всички коментирани редове? Е, можете! Просто стартирайте това:

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

The –v опция разказва grep за да обърне изхода му, което означава, че вместо да отпечатвате съвпадащи редове, направете обратното и отпечатайте всички редове, които не съвпадат с израза, в този случай # коментирани редове.

Имайте предвид, че ние също използвахме grep . в края, за да скриете изхода на всички празни редове. По този начин виждаме само конфигурационните настройки в нашия терминал.

Отпечатайте съдържанието на файла чрез изключване на коментари и празни редове
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>

3. Намерете всички .mp3 файлове в Linux

The grep може да бъде много полезно за филтриране от стандартен изход. Да кажем например, че имате цяла папка, пълна с музикални файлове в куп различни формати.

Искате да намерите всички *.mp3 файлове от художника Джей Зи, но не искате нито един от ремиксираните песни. Използвайки a намери команда с няколко grep тръбите ще свършат работа:

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

В този пример използваме намирам за да отпечатате всички файлове с a *.mp3 разширение, тръбопроводно към grep –i за филтриране и отпечатване на всички файлове с името „Джей Зи” и след това още една тръба към grep –vi който филтрира и не отпечатва всички имена на файлове с низа (във всеки случай) “ремикс”.

[ You might also like: 35 Practical Examples of Linux Find Command ]

4. Покажете броя на редовете преди или след низа за търсене

Друга няколко опции са –A и –B ключове, които показват съответстващия ред и броя на редовете, които идват преди или след низа за търсене.

Въпреки че страницата на човека дава по-подробно обяснение, намирам, че е най-лесно да запомня опциите като –A = следи –B = преди:

# ifconfig | grep -A 4 inet
# ifconfig | grep -B 2 UP
Отпечатайте броя на редовете преди и след низ
Отпечатайте броя на редовете преди и след низ

5. Отпечатва броя на редовете около съвпадението

Grep’s –C опцията е подобна, но вместо да отпечатва редовете, които идват преди или след низа, тя отпечатва редовете във всяка посока:

# 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

6. Пребройте броя на съвпаденията

Подобно на тръбопровод a grep низ към брой думи (wc команда) вградената опция на grep може да извърши същото за вас:

# ifconfig | grep -c inet6

7. Търсете файлове по даден низ в Linux

The –n опция за grep е много полезно при отстраняване на грешки във файлове по време на грешки при компилиране. Той показва номера на реда във файла на дадения низ за търсене:

# grep -n "main" setup.py

8. Рекурсивно търсене на низ във всички директории

Ако искате да търсите низ в текущата директория заедно с всички поддиректории, можете да посочите –r опция за рекурсивно търсене:

# grep -r “function” *

9. Потърсете целия модел

Преминавайки на -w опцията за grep търси целия шаблон, който е в низа. Например с помощта на:

# ifconfig | grep -w "RUNNING"

Ще отпечата реда, съдържащ модела в кавички. От друга страна, ако опитате:

# ifconfig | grep -w "RUN"
Намерете целия модел
Намерете целия модел

Нищо няма да бъде върнато, тъй като ние не търсим модел, а цяла дума.

10. Търсене на низ в Gzipped файлове

Заслужават да се споменат производните на grep. Първият е хваткакоето, подобно на zcatе за използване на gzipped файлове. Необходими са същите опции като grep и се използва по същия начин:

# zgrep -i error /var/log/syslog.2.gz
Низ за търсене в Gzipped файлове
Низ за търсене в Gzipped файлове

11. Съвпадение на регулярни изрази във файлове

Командата egrep е друга производна, която означава „Разширен глобален регулярен израз”. Той разпознава допълнителни изразни мета-символи като at + ? | и ().

[ You might also like: What’s Difference Between Grep, Egrep, and Fgrep in Linux? ]

егреп е много полезно за търсене на изходни файлове и други части от код, ако възникне необходимост. Може да се извика от обикновен grep чрез посочване на –E опция.

# grep -E

12. Търсете низ с фиксиран модел

The fgrep търси във файл или списък от файлове за низ с фиксиран модел. Това е същото като grep -F. Често срещан начин на използване fgrep е да му прехвърлите файл с модели:

# fgrep –f file_full_of_patterns.txt file_to_search.txt

Това е само отправна точка с grep, но както вероятно сте в състояние да видите, той е безценен за различни цели. Освен простите команди от един ред, които сме внедрили, grep може да се използва за писане на мощни cron работни места и стабилни shell скриптовекато за начало.

[ You might also like: 11 Advanced Linux ‘Grep’ Commands on Character Classes and Bracket Expressions ]

Бъдете креативни, експериментирайте с опциите на man страницаи измислете grep изрази които служат на вашите собствени цели!

Публикациите се превеждат автоматично с google translate

Loading


Сподели