Grep start

Материал из ALT Linux Wiki

Предположим, у нас есть данные:

$ cat /etc/passwd
root:x:0:0:System Administrator:/root:/bin/bash
bin:x:1:1:bin:/:/dev/null
daemon:x:2:2:daemon:/:/dev/null
adm:x:3:4:adm:/var/adm:/dev/null
lp:x:4:7:lp:/var/spool/lpd:/dev/null
mail:x:8:12:mail:/var/spool/mail:/dev/null
news:x:9:13:news:/var/spool/news:/dev/null
<...>

Для того чтобы "подставить" определенные значения в команду можно использовать команду grep. И в этой статье будет описана попытка объяснить данную утилиту для новичков.

Вывести строки, содержащие следующие символы

| grep слово

Пример:

$ cat /etc/passwd | grep root

Вывод:

root:x:0:0:System Administrator:/root:/bin/bash

Вывести строки независимо от регистра

grep -i "слово"

Пример:

$ grep -i "service" /etc/nsswitch.conf 

Вывод:

# This is the Name Service Switch configuration file.  This file should
# should stop if the search with the previous service turned up nothing.
# server responding) then the search continues with the next service.
# Legal name services are:
#       dns                     Use DNS (Domain Name Service)
services:   files
#services:  nisplus [NOTFOUND=return] files

Шаблоны для поиска

Указав шаблоны, вы можете отфильтровать поиск по конкретным словам:

grep -e "слово1" -e "слово2"

Пример:

$ grep -e "petr" -e "root" /etc/passwd

Вывод:

root:x:0:0:System Administrator:/root:/bin/bash
petr:x:500:500::/home/petr:/bin/bash
petr_a:x:501:501:1st hasher satellite for petr:/dev/null:/dev/null
petr_b:x:502:502:2nd hasher satellite for petr:/dev/null:/dev/null

Указание номера строки

Указав следующий параметр, в выводе вы получите номер строки, содержащий по фильтру символ.

grep -n 'слово'

Пример:

$ grep -n petr /etc/passwd

Вывод:

55:petr:x:500:500::/home/petr:/bin/bash
57:petr_a:x:501:501:1st hasher satellite for petr:/dev/null:/dev/null
58:petr_b:x:502:502:2nd hasher satellite for petr:/dev/null:/dev/null

Указание строки с символом, который например может использоваться bash

grep -F "символ"

Пример:

$ grep -F "[" /etc/grub.d/00_header

Вывод:

if [ "x${GRUB_DEFAULT}" = "x" ] ; then GRUB_DEFAULT=0 ; fi
if [ "x${GRUB_DEFAULT}" = "xsaved" ] ; then GRUB_DEFAULT='${saved_entry}' ; fi
if [ "x${GRUB_TIMEOUT}" = "x" ] ; then GRUB_TIMEOUT=5 ; fi
<...>
if [ "x$GRUB_BUTTON_CMOS_ADDRESS" != "x" ] && [ "x$GRUB_BUTTON_CMOS_CLEAN" = "xyes" ]; then
if [ "x${GRUB_INIT_TUNE}" != "x" ] ; then
if [ "x${GRUB_BADRAM}" != "x" ] ; then

Использование с командой

Вы можете фильтровать не только содержимое файла, но и вывод команд.

Например:

$ ls | grep "local"
locale.conf
local-policy
local-policy-system
localtime

Вывод контекста

Иногда, для отладки нужно вывести содержимое до выводимой строки или после.

N строк после

$ grep -AN "слово" 

Пример:

$ grep -A4 "error" /var/log/Xorg.0.log
        (WW) warning, (EE) error, (NI) not implemented, (??) unknown.
[     7.519] (==) Log file: "/var/log/Xorg.0.log", Time: Tue Nov  5 11:17:11 2024
[     7.520] (==) Using config directory: "/etc/X11/xorg.conf.d"
[     7.520] (==) Using system config directory "/usr/share/X11/xorg.conf.d"
[     7.526] (==) No Layout section.  Using the first Screen section.

N строк до

$ grep -BN "слово" 

Пример:

$ grep -B4 "error" /var/log/Xorg.0.log
[     7.519]    Before reporting problems, check http://wiki.x.org 
        to make sure that you have the latest version.
[     7.519] Markers: (--) probed, (**) from config file, (==) default setting,
        (++) from command line, (!!) notice, (II) informational,
        (WW) warning, (EE) error, (NI) not implemented, (??) unknown.

N строк до и после

$ grep -CN "слово"

Пример:

$ grep -C4 "error" /var/log/Xorg.0.log
[     7.519]    Before reporting problems, check http://wiki.x.org
        to make sure that you have the latest version.
[     7.519] Markers: (--) probed, (**) from config file, (==) default setting,
        (++) from command line, (!!) notice, (II) informational,
        (WW) warning, (EE) error, (NI) not implemented, (??) unknown.
[     7.519] (==) Log file: "/var/log/Xorg.0.log", Time: Tue Nov  5 11:17:11 2024
[     7.520] (==) Using config directory: "/etc/X11/xorg.conf.d"
[     7.520] (==) Using system config directory "/usr/share/X11/xorg.conf.d"
[     7.526] (==) No Layout section.  Using the first Screen section.

Рекрусивный поиск в нескольких файлах/каталогах

$ grep -r "слово" путь

Пример:

$ grep -r "Kernel" /var/log
/var/log/Xorg.0.log.old:[ 22935.893] Kernel command line: BOOT_IMAGE=/boot/vmlinuz-un-def root=UUID=db192b56-b670-4975-aad7-121f147d01a7 ro quiet panic=30 splash psi=1
...
/var/log/journald:сен 05 19:18:36 comp-alt-petr systemd[1]: Stopped Apply Kernel Variables. 
...
/var/log/Xorg.0.log:[     7.518] Kernel command line: BOOT_IMAGE=/boot/vmlinuz-un-def root=UUID=db192b56-b670-4975-aad7-121f147d01a7 ro quiet panic=30 splash psi=1

Выбор расширений файлов для поиска

С помощью опций --include и --exclude вы можете фильтровать файлы, которые будут принимать участие в поиске.

Например:

$ grep --include="*.расширение" "слово" путь

Пример:

# grep -r --include="*.log" "Kernel" /var/log

Поиск слов

Когда вы ищете строку abc, grep будет выводить также kbabc, abc123, aafrabc32 и тому подобные комбинации. Вы можете заставить утилиту искать по содержимому файлов в Linux строки, которые включают только искомые слова полностью с помощью опции -w. Например:

$ grep -w "root" /etc/passwd

Вывод:

root:x:0:0:System Administrator:/root:/bin/bash

Вывод количества строк

$ grep -c 'слово' путь

Пример:

$ grep -c 'null' /etc/passwd
57

Инвертированный поиск

Поиск строк не содержащих указанное слово:

$ grep -v слово путь

Пример:

$ grep -v root /etc/passwd
bin:x:1:1:bin:/:/dev/null
daemon:x:2:2:daemon:/:/dev/null
...
fwupd-refresh:x:433:433:Firmware update daemon:/var/lib/fwupd:/sbin/nologin
_kdesu5:x:463:431:KDE SU wrapper:/var/lib/_kdesu5:/sbin/nologin

Вывод имен файлов

Вывести только имена файлов содержащие слово:

$ grep -l "слово" путь

Пример:

$ grep -lr 'Kernel' /var/log/

Вывод:

/var/log/Xorg.0.log.old
/var/log/journald
/var/log/Xorg.2.log.old
/var/log/journal/19866df1846df91fb2c5fc9e6464e8ac/system@1eac3e06acd346b5854c3e7761cae966-0000000000000001-000607d1add53565.journal
...
/var/log/journal/19866df1846df91fb2c5fc9e6464e8ac/system.journal
/var/log/journal/19866df1846df91fb2c5fc9e6464e8ac/user-500@c51e84cdf9ea4cb2b1fda02f5ed8e50d-000000000018d3ee-00062319f006cafc.journal
/var/log/Xorg.0.log
/var/log/Xorg.2.log

Источник