Grep start
Предположим, у нас есть данные:
$ 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