Сблъсквали ли сте се някога със задачата да търсите конкретен низ или шаблон във файл, но нямате представа откъде да започнете да търсите? Добре тогава, ето го 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
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

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