Примеры grep bash: Что такое grep и с чем его едят / Хабр
Что такое grep и с чем его едят. Примеры команды grep в Linux. Команда grep в Linux
Рассмотрим синтаксис.
grep [параметры] шаблон [имя файла]
Или так:
Команда | grep шаблон
Здесь под параметрами понимаются аргументы, с помощью которых настраивается поиск и вывод на экран. Например нужно найти слово «линукс», и не учитывать регистр при поиске. Тогда нужно использовать опцию «-i».
Шаблон — это выражение или строка.
Имя файла — где искать.
Основные параметры:
—help. Вывести справочную информацию.
-i. Не учитывать регистр при поиске.
-V. Узнать текущую версию.
-v. Инвертированный поиск.
-s. Не выводить на экран сообщения об ошибкам. Например сообщение о несуществующих файлах.
-r. Поиск в каталогах, подкаталогах или рекурсивный grep.
-w. Искать как слово с пробелами.
-с. Опция считает количество вхождений (счетчик).
-e. Регулярные выражения.
Используем команду grep в Linux
Что касается различий между дистрибутивами Линукс, в этом случае они не играют никакой роли, поскольку интересующая вас команда grep по умолчанию доступна в большинстве сборок и применяется абсолютно одинаково. Сегодня мы бы хотели обсудить не только действие grep, но и разобрать основные аргументы, которые позволяют значительно упростить процедуру поиска.
Подготовительные работы
Все дальнейшие действия будут производиться через стандартную консоль, она же позволяет открывать файлы только путем указания полного пути к ним либо если «Терминал» запущен из необходимой директории. Узнать родительскую папку файла и перейти к ней в консоли можно так:
- Запустите файловый менеджер и переместитесь в нужную папку.
- Нажмите правой кнопкой мыши на требуемом файле и выберите пункт «Свойства».
- Во вкладке «Основные» ознакомьтесь со строкой «Родительская папка».
- Теперь запустите «Терминал» удобным методом, например, через меню или зажатием комбинации клавиш Ctrl + Alt + T.
- Здесь перейдите к директории через команду cd /home/user/folder, где user — имя пользователя, а folder — название папки.
Задействуйте команду cat + название файла, если хотите просмотреть полное содержимое. Детальные инструкции по работе с этой командой ищите в другой нашей статье по ссылке ниже.
Благодаря выполнению приведенных выше действий вы можете использовать grep, находясь в нужной директории, без указания полного пути к файлу.
Стандартный поиск по содержимому
Прежде чем переходить к рассмотрению всех доступных аргументов, важно отметить и обычный поиск по содержимому. Он будет полезен в тех моментах, когда необходимо найти простое совпадение по значению и вывести на экран все подходящие строки.
- В командной строке введите grep word testfile, где word — искомая информация, а testfile — название файла. Когда производите поиск, находясь за пределами папки, укажите полный путь по примеру /home/user/folder/filename. После ввода команды нажмите на клавишу Enter.
- Осталось только ознакомиться с доступными вариантами. На экране отобразятся полные строки, а ключевые значения будут выделены красным цветом.
- Важно учитывать и регистр букв, поскольку кодировка Linux не оптимизирована для поиска без учета больших или маленьких символов. Если вы хотите обойти определение регистра, впишите grep -i «word» testfile.
- Как видите, на следующем скриншоте результат изменился и добавилась еще одна новая строка.
1. Простой поиск в файле
Давайте рассмотрим пример в файле “/etc/passwd” для поиска строки в файле. Чтобы найти слово “system” при помощи команды grep, используйте команду:
[root@destroyer ~]# cat /etc/passwd|grep system
Пример вывода:
systemd-bus-proxy:x:899:897:systemd Bus Proxy:/:/sbin/nologin systemd-network:x:898:896:systemd Network Management:/:/sbin/nologin
2. Подсчет появления слов.
В приведенном выше примере мы имеем в системе поиск слов в файл
е “/etc/passwd”. Если мы хотим знать количество или число появлений слова в файле, то используйте опцию ниже:
[root@destroyer ~]# cat /etc/passwd|grep -c system 2 [root@destroyer ~]#
Выше указанно, что слово появилось два раза в файле “/etc/passwd”.
3. Игнорировать регистрозависимые слова
Команда grep чувствительна к регистру, это означает, что он будет искать только данное слово в файле. Чтобы проверить эту функцию, создайте один файл с именем «test.txt» и с содержанием, как показано ниже:
[root@destroyer tmp]# cat test.txt AndreyEx andreyex ANDREYEX Andreyex [root@destroyer tmp]#
Теперь, если вы попытаетесь найти строку «andreyex», то команда не будет перечислять все слова «andreyex» с разными вариантами, как показано ниже:
[root@destroyer tmp]# grep andreyex test.txt andreyex [root@destroyer tmp]#
Этот результат подтверждает, что только один вариант будет показан, игнорируя остальную часть слова «andreyex» с разными вариантами. И если вы хотите игнорировать этот случай, вам нужно использовать параметр «-i» с grep, как показано ниже:
[root@destroyer tmp]# grep -i andreyex test.txt AndreyEx andreyex ANDREYEX Andreyex
4. Две разные строки внутри файла с командой grep
Теперь, если вы хотите найти два слова или строки с помощью команды grep, то вы должны задать расширенные. В следующей команде мы находим две строки «system» и «nobody» в файле /etc/passwd.
[root@destroyer ~]# grep ‘system|nobody’ /etc/passwd nobody:x:89:89:Nobody:/:/sbin/nologin systemd-bus-proxy:x:899:897:systemd Bus Proxy:/:/sbin/nologin systemd-network:x:898:896:systemd Network Management:/:/sbin/nologin [root@destroyer ~]#
5. Рекурсивный поиск
Допустим, вы хотите найти слово или строку рекурсивно в любом месте каталога, тогда используйте опцию -r. Например, если вы хотите найти слово «check_oracle» рекурсивно в каталоге /etc, то используйте следующую команду:
[root@destroyer ~]# grep -r «check_oracle» /etc/ /etc/selinux/targeted/contexts/files/file_contexts:/usr/lib/nagios/plugins/check_oracle — system_u:object_r:nagios_services_plugin_exec_t:s0 Binary file /etc/selinux/targeted/contexts/files/file_contexts.bin matches /etc/selinux/targeted/modules/active/file_contexts:/usr/lib/nagios/plugins/check_oracle — system_u:object_r:nagios_services_plugin_exec_t:s0 /etc/selinux/targeted/modules/active/file_contexts.template:/usr/lib/nagios/plugins/check_oracle — system_u:object_r:nagios_services_plugin_exec_t:s0 [root@destroyer ~]
В выводе выше мы можем иметь возможность видеть имя файла, в котором мы нашли строку, и если вы хотите убрать имя файла в конечном результате, то используйте опцию «-h», как показано ниже:
[root@destroyer ~]# grep -hr «check_oracle» /etc/ /usr/lib/nagios/plugins/check_oracle — system_u:object_r:nagios_services_plugin_exec_t:s0 Binary file /etc/selinux/targeted/contexts/files/file_contexts.bin matches /usr/lib/nagios/plugins/check_oracle — system_u:object_r:nagios_services_plugin_exec_t:s0 /usr/lib/nagios/plugins/check_oracle — system_u:object_r:nagios_services_plugin_exec_t:s0 [root@destroyer ~]#
6. Вывод команды grep.
Если вы хотите найти строку или слово в любом выводе команды, то вы должны использовать оператор «|», а затем <строка> в grep. Допустим, вы хотите найти в памяти, связанные слова вывода команды dmesg, то используйте следующую команду. [root@destroyer ~]# dmesg |grep memory [ 0.000000] Base memory trampoline at [ffff880000098000] 98000 size 19456 [ 0.000000] init_memory_mapping: [mem 0x00000000-0x000fffff] [ 0.000000] init_memory_mapping: [mem 0x3fe00000-0x4fffffff] [ 0.000000] init_memory_mapping: [mem 0x3c000000-0x4fdfffff] [ 0.000000] init_memory_mapping: [mem 0x00100000-0x4bffffff] [ 0.000000] kexec: crashkernel=auto resulted in zero bytes of reserved memory. [ 0.000000] Early memory node ranges [ 0.000000] PM: Registered nosave memory: [mem 0x0003e000-0x0003ffff] [ 0.000000] PM: Registered nosave memory: [mem 0x000a0000-0x000dffff] [ 0.000000] PM: Registered nosave memory: [mem 0x000e0000-0x000fffff] [ 0.000000] please try ‘cgroup_disable=memory’ option if you don’t want memory cgroups [ 0.030181] Initializing cgroup subsys memory [ 0.862358] Freeing initrd memory: 23532k freed [ 1.064599] Non-volatile memory driver v1.3 [ 1.069351] crash memory driver: version 1.1 [ 1.186673] Freeing unused kernel memory: 1430k freed [ 5.567780] [TTM] Zone kernel: Available graphics memory: 480345 kiB [root@destroyer ~]#
8. Точное совпадение слова
В соответствии с примером, приведенным в пункте 7, если мы ищем Andreyex, то он будет печатать все вхождение Andreyex как «Andreyex12», «Andreyex454», «Andreyex34343», а также «Andreyex», как показано ниже:
[root@destroyer tmp]# grep Andreyex test.txt Andreyex12 Andreyex454 Andreyex34343 Andreyex [root@destroyer tmp]#
тогда, если мы хотим найти точное слово «Andreyex» вместо этого, чтобы перечислить весь вывод выше, то используйте опцию «-w», как показано ниже:
[root@destroyer tmp]# grep -w Andreyex test.txt Andreyex [root@destroyer tmp]#
Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.
7. Инвертирование с помощью команды grep в Linux
Допустим, если вы хотите отобразить все слова в файле, который не содержит какое-либо конкретное слово, то используйте опцию «-v». Это позволяет создать один файл с содержимым, как показано ниже:
[root@destroyer tmp]# cat test.txt Andreyex12 Andreyex454 Andreyex34343 Andreyex LinuxRoutes Linux [root@destroyer tmp]#
Если мы не хотим печатать строки, содержащие слово Linux, то используйте следующую команду.
[root@destroyer tmp]# grep -v Linux test.txt Andreyex12 Andreyex454 Andreyex34343 Andreyex
[spoiler title=»Источники»]
- https://www.vseprolinux.ru/grep
- https://lumpics.ru/linux-grep-command-examples/
- https://andreyex.ru/operacionnaya-sistema-linux/polnoe-rukovodstvo-komanda-grep-v-linux/
[/spoiler]
HowTo: использование команды grep в Linux
grep — утилита командной строки, которая находит на вводе строки,
отвечающие заданному регулярному выражению, и выводит их, если вывод не
отменён специальным ключом.
Синтаксис
Синтаксис может быть следующим:
grep 'word' filename grep 'word' file1 file2 file3 grep 'string1 string2' filename cat otherfile | grep 'something' command | grep 'something' command option1 | grep 'data' grep --color 'data' fileName
Поиск по файлу
Чтобы выполнить поиск пользователя boo в файле /etc/passwd запустите:
Вывод будет примерно таким:
boo:x:1000:1000:boo,,,:/home/boo:/bin/ksh
Так же вы можете выполнить регистронезависимый поиск строки boo
(например, bOo, Boo, BOO и т.п.):
$ grep -i "boo" /etc/passwd
Можно искать во всех файлах в каталоге:
$ grep -r "192.168.1.5" /etc/
или
$ grep -R "192.168.1.5" /etc/
Пример ла, в котором встречается искомая строка (например,
/etc/ppp/options). Такое поведение можно отключить, т.е. grep не будет
вставлять в результаты поиска имена файлов, добавив ключ -h:
$ grep -h -R "192.168.1.5" /etc/
или
$ grep -hR "192.168.1.5" /etc/
Пример вывода:
# ms-wins 192.168.1.50 # ms-wins 192.168.1.51 addresses1=192.168.1.5;24;192.168.1.2;
Использование grep для поиска только слов
Если вы ищете boo, то grep найдет и такое сочетание fooboo, boo123,
123boofoo и т.п. Для того чтоб grep нашел именно слово boo можно указать
ключ -w:
Поиск двух разных слов
$ egrep -w 'word1|word2' /path/to/file
Подсчет количества
grep может посчитать количество вхождений слова в файл:
$ grep -c 'word' /path/to/file
Опция -n позволит вывести пронумерованные строки из файла номером этой
строки:
$ grep -n 'root' /etc/passwd
Пример вывода:
1:root:x:0:0:root:/root:/bin/bash 1042:rootdoor:x:0:0:rootdoor:/home/rootdoor:/bin/csh 3319:initrootapp:x:0:0:initrootapp:/home/initroot:/bin/ksh
Инвертированный вывод
Вы можете использовать параметр -v для инвертирования вывода, т.е.
вывести все строки кроме тех, в которых встречается искомое слово:
$ grep -v bar /path/to/file
Unix / Linux конвеер и grep
grep можно комбинировать с конвеером
(pipe).
Этот пример выведет имена жестких дисков:
# dmesg | egrep '(s|h)d[a-z]'
Показать модель CPU:
# cat /proc/cpuinfo | grep -i 'Model'
Эта же команда может быть выполнена по другому без pipe:
# grep -i 'Model' /proc/cpuinfo
Пример вывода:
model : 30 model name : Intel(R) Core(TM) i7 CPU Q 820 @ 1.73GHz model : 30 model name : Intel(R) Core(TM) i7 CPU Q 820 @ 1.73GHz
Вывести только список файлов
Передав параметр -l можно вывести только имена файлов:
И, наконец, можно вывести результат с подсветкой:
$ grep --color vivek /etc/passwd
grep — поиск в Linux, примеры
1. Немного про grep
Команда grep (global regular expression print) остается одной из наиболее универсальных команд в окружении командной строки Linux. Это происходит потому что grep является чрезвычайно мощной утилитой которая дает пользователям возможность сортировать ввод на основе сложных правил, тем самым делая ее популярным связующим звеном в конвейере команд. Grep в основном используется для поиска текста как в данных поступающих на стандартный вход, так и в указанных файлах на предмет строк содержащих указанные слова или подстроки.
2. Базовый синтаксис команды grep
Ниже представлены примеры использования grep с базовым синтаксисом:
grep 'word' filename
grep 'word' file1 file2 file3
grep 'string1 string2' filename
cat otherfile | grep 'something'
command | grep 'something'
command option1 | grep 'data'
grep --color 'data' fileName
3. Как использовать grep для поиска в файлах
Попробуем найти пользователя «vasya» в файле passwd. Для поиска в файле /etc/passwd информации о пользователе «vasya» необходимо использовать следующую команду:
grep vasya /etc/passwd
Пример результата:
vasya:x:1000:1000:vasya,,,:/home/vasya:/bin/bash
Также мы можем попросить grep осуществлять поиск игнорируя регистр букв, то есть не делая различия между большими и маленькими буквами. Для этого используется параметр -i, как показано ниже:
grep -i "vasya" /etc/passwd
4. Рекурсивное использование grep
Если у вас есть большое количество текстовых файлов в ряде директорий и поддиректорий, к примеру, конфигурационных файлов apache в /etc/apache2 и требуется найти файл где содержится определенный текст, то стоит использовать параметр -r чтобы осуществить рекурсивный поиск. То есть поиску будет осуществлен по всем файлам в иерархии директорий:
grep -r "domain.tld" /etc/apache2/
Также можно использовать этот параметр в верхнем регистре. То есть можно писать -R. Разница в том что при использовании -r не происходит обработка символических ссылок, а при использовании -R — происходит. Пример использования:
grep -R debian /etc/apache2/
/etc/apache2/sites-available/debian-help.ru: ServerName debian-help.ru
/etc/apache2/sites-available/debian-help.ru: ServerAlias www.debian-help.ru
Как можно видеть результат состоит из имени файла, где была найдена строка и самой строки. Включение в вывод имен файлов можно с легкостью подавить с помощью параметра -h, как показано ниже:
grep -r -h debian /etc/apache2/
ServerName debian-help.ru
ServerAlias www.debian-help.ru
5. Использование grep для поиска только целых слов
Когда вы ищите qwe, grep выберет все вхождения данного сочетания, к примеру, qwerty, qwe123, 345qwerty и множество других комбинаций. Вы можете указать, чтобы grep выбирал только те строки, которые содержат точное включение в виде целого слова. Для этого используйте параметр -w:
grep -w "qwe" filename
6. Как искать несколько различных слов
Для поиска двух или более различных слов вы можете использовать команду egrep следующим образом:
egrep -w 'first_word|second_word' filename
Либо вариант с просто grep:
grep -w 'first_word\|second_word' filename
7. Подсчет количества строк, содержащих вхождение
grep может сообщать сколько строк содержат указанное сочетание. Для этого воспользуйтесь параметром -c (count):
grep -c 'word' filename
В дополнение, можно использовать параметр -n чтобы заставить grep выводить номера строк в файле, в которых было найдено включение:
grep -n 'www-data' /etc/passwd
13:www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
8. Инвертный поиск
grep позволяет осуществлять поиск наоборот, то есть будут выведены все строки, кроме имеющих вхождение указанного слова и для этого используется параметр -v:
grep -v 'word' filename
Можно исключить что-либо из вывода поиска применив конвейер:
grep 'first_word' filename | grep -v 'second_word'
9. Как выводить только имена файлов в которых есть включение слова
Для вывода только имен файлов нужно использовать параметр -l, к примеру, так:
grep -l 'word' *.txt
10. Поиск всех файлов содержащих слово во всех файлах и поддиректориях
Если вам нужно осуществить поиск слова в любых формах во всех файлах в этой директории и всех содержащихся в ней тоже, то используйте сочетание описанных выше параметров:
grep -rli 'word' ./*
11. Вывод строк перед и после найденного вхождения
Для вывода нескольких строк перед вхождением используется параметры -A, а после вождения -B.
К примеру, чтобы вывести 5 строк перед и 10 после найденного вхождения используйте команду:
grep -A 5 -B 10 'word' filename
bash команда grep — Unixblog.org.UA
grep — Поиск файлов или строки в файле по шаблону.
grep "шаблон поиска" "file_name"
Допустим в папке /root у нас лежит три файла:
/root/.bash_history
/root/.bash_history
/root/test
-r Поиск рекурсивно по всем файлам в указанной директории. Пример:
#grep -r authorized /root
/root/.bash_history:mv authorized_keys authorized_keys2
/root/.bash_history:chmod 600 authorized_keys2
/root/test: authorized_keys2 test file
-h Не выводит имя файла при поиске по нескольким файлам. Пример:
#grep -rh authorized /root
mv authorized_keys authorized_keys2
chmod 600 authorized_keys2
authorized_keys2 test file
-l Выводит только имена файлов, в которых найдена строка. Если в файле есть несколько таких строк, то имя файла выводится только один раз. Пример:
#grep -rl authorized /root
/root/.bash_history
/root/test
-c Выводит количество найденных строк. Пример
#grep -с authorized /root/.bash_history
2
#grep -rlс authorized /root
3
-v Выводит все строки кроме содержащих указанный шаблон.
-i Игнорировать регистр при поиске. То есть если Вы указали шаблон поиска с маленьких букв, в результат
попадут также строки, где встречается этот шаблон с заглавными буквами.
-n Добаляет номер найденной строки в начало ее вывода.
-s Подавляет вывод ошибок о ненайденом файле, например.
-w Поиск шаблона как отдельного слова, например поиск по -w «auth» не будет включать в результат строки, где встречается «authentic», а только строки где есть отдельоне слово auth.
Команда grep в Linux. Полное руководство
Утилита grep в Linux предназначена для фильтрации выходных данных или поиска определенного слова в файле. Этот пост будет касаться основных параметров, доступных утилиты grep в Linux.
Краткая форма команды grep (Global Regular Expression and Print). На базовом уровне команда grep в Linux используются для поиска или фильтрации простых текстовых данных, используя некоторую форму регулярного выражения.
Команда grep в Linux и ее опции
Перед изучением команды grep, посмотрим на основной синтаксис ее.
Основной синтаксис для команды grep
cat <file name>|grep <string or regular expression> <command>|grep <string or regular expression> grep <string or regular expression> [file name]
Варианты с командой grep
1. Простой поиск в файле
Давайте рассмотрим пример в файле “/etc/passwd” для поиска строки в файле. Чтобы найти слово “system” при помощи команды grep, используйте команду:
[root@destroyer ~]# cat /etc/passwd|grep system
Пример вывода:
systemd-bus-proxy:x:899:897:systemd Bus Proxy:/:/sbin/nologin systemd-network:x:898:896:systemd Network Management:/:/sbin/nologin
2. Подсчет появления слов.
В приведенном выше примере мы имеем в системе поиск слов в файл
е “/etc/passwd”. Если мы хотим знать количество или число появлений слова в файле, то используйте опцию ниже:
[root@destroyer ~]# cat /etc/passwd|grep -c system 2 [root@destroyer ~]#
Выше указанно, что слово появилось два раза в файле “/etc/passwd”.
3. Игнорировать регистрозависимые слова
Команда grep чувствительна к регистру, это означает, что он будет искать только данное слово в файле. Чтобы проверить эту функцию, создайте один файл с именем «test.txt» и с содержанием, как показано ниже:
[root@destroyer tmp]# cat test.txt AndreyEx andreyex ANDREYEX Andreyex [root@destroyer tmp]#
Теперь, если вы попытаетесь найти строку «andreyex», то команда не будет перечислять все слова «andreyex» с разными вариантами, как показано ниже:
[root@destroyer tmp]# grep andreyex test.txt andreyex [root@destroyer tmp]#
Этот результат подтверждает, что только один вариант будет показан, игнорируя остальную часть слова «andreyex» с разными вариантами. И если вы хотите игнорировать этот случай, вам нужно использовать параметр «-i» с grep, как показано ниже:
[root@destroyer tmp]# grep -i andreyex test.txt AndreyEx andreyex ANDREYEX Andreyex
4. Две разные строки внутри файла с командой grep
Теперь, если вы хотите найти два слова или строки с помощью команды grep, то вы должны задать расширенные. В следующей команде мы находим две строки «system» и «nobody» в файле /etc/passwd.
[root@destroyer ~]# grep 'system\|nobody' /etc/passwd nobody:x:89:89:Nobody:/:/sbin/nologin systemd-bus-proxy:x:899:897:systemd Bus Proxy:/:/sbin/nologin systemd-network:x:898:896:systemd Network Management:/:/sbin/nologin [root@destroyer ~]#
5. Рекурсивный поиск
Допустим, вы хотите найти слово или строку рекурсивно в любом месте каталога, тогда используйте опцию -r. Например, если вы хотите найти слово «check_oracle» рекурсивно в каталоге /etc, то используйте следующую команду:
[root@destroyer ~]# grep -r "check_oracle" /etc/ /etc/selinux/targeted/contexts/files/file_contexts:/usr/lib/nagios/plugins/check_oracle -- system_u:object_r:nagios_services_plugin_exec_t:s0 Binary file /etc/selinux/targeted/contexts/files/file_contexts.bin matches /etc/selinux/targeted/modules/active/file_contexts:/usr/lib/nagios/plugins/check_oracle -- system_u:object_r:nagios_services_plugin_exec_t:s0 /etc/selinux/targeted/modules/active/file_contexts.template:/usr/lib/nagios/plugins/check_oracle -- system_u:object_r:nagios_services_plugin_exec_t:s0 [root@destroyer ~]
В выводе выше мы можем иметь возможность видеть имя файла, в котором мы нашли строку, и если вы хотите убрать имя файла в конечном результате, то используйте опцию «-h», как показано ниже:
[root@destroyer ~]# grep -hr "check_oracle" /etc/ /usr/lib/nagios/plugins/check_oracle -- system_u:object_r:nagios_services_plugin_exec_t:s0 Binary file /etc/selinux/targeted/contexts/files/file_contexts.bin matches /usr/lib/nagios/plugins/check_oracle -- system_u:object_r:nagios_services_plugin_exec_t:s0 /usr/lib/nagios/plugins/check_oracle -- system_u:object_r:nagios_services_plugin_exec_t:s0 [root@destroyer ~]#
6. Вывод команды grep.
Если вы хотите найти строку или слово в любом выводе команды, то вы должны использовать оператор «|», а затем <строка> в grep. Допустим, вы хотите найти в памяти, связанные слова вывода команды dmesg, то используйте следующую команду.
[root@destroyer ~]# dmesg |grep memory [ 0.000000] Base memory trampoline at [ffff880000098000] 98000 size 19456 [ 0.000000] init_memory_mapping: [mem 0x00000000-0x000fffff] [ 0.000000] init_memory_mapping: [mem 0x3fe00000-0x4fffffff] [ 0.000000] init_memory_mapping: [mem 0x3c000000-0x4fdfffff] [ 0.000000] init_memory_mapping: [mem 0x00100000-0x4bffffff] [ 0.000000] kexec: crashkernel=auto resulted in zero bytes of reserved memory. [ 0.000000] Early memory node ranges [ 0.000000] PM: Registered nosave memory: [mem 0x0003e000-0x0003ffff] [ 0.000000] PM: Registered nosave memory: [mem 0x000a0000-0x000dffff] [ 0.000000] PM: Registered nosave memory: [mem 0x000e0000-0x000fffff] [ 0.000000] please try 'cgroup_disable=memory' option if you don't want memory cgroups [ 0.030181] Initializing cgroup subsys memory [ 0.862358] Freeing initrd memory: 23532k freed [ 1.064599] Non-volatile memory driver v1.3 [ 1.069351] crash memory driver: version 1.1 [ 1.186673] Freeing unused kernel memory: 1430k freed [ 5.567780] [TTM] Zone kernel: Available graphics memory: 480345 kiB [root@destroyer ~]#
7. Инвертирование с помощью команды grep в Linux
Допустим, если вы хотите отобразить все слова в файле, который не содержит какое-либо конкретное слово, то используйте опцию «-v». Это позволяет создать один файл с содержимым, как показано ниже:
[root@destroyer tmp]# cat test.txt Andreyex12 Andreyex454 Andreyex34343 Andreyex LinuxRoutes Linux [root@destroyer tmp]#
Если мы не хотим печатать строки, содержащие слово Linux, то используйте следующую команду.
[root@destroyer tmp]# grep -v Linux test.txt Andreyex12 Andreyex454 Andreyex34343 Andreyex
8. Точное совпадение слова
В соответствии с примером, приведенным в пункте 7, если мы ищем Andreyex, то он будет печатать все вхождение Andreyex как «Andreyex12», «Andreyex454», «Andreyex34343», а также «Andreyex», как показано ниже:
[root@destroyer tmp]# grep Andreyex test.txt Andreyex12 Andreyex454 Andreyex34343 Andreyex [root@destroyer tmp]#
тогда, если мы хотим найти точное слово «Andreyex» вместо этого, чтобы перечислить весь вывод выше, то используйте опцию «-w», как показано ниже:
[root@destroyer tmp]# grep -w Andreyex test.txt Andreyex [root@destroyer tmp]#
Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.
grep Linux синтаксис и примеры
Часто требуется найти в файле кусок текста или вывести на экран только часть информации, в этом нам поможет простая, но очень популярная утилита grep. Наиболее часто ее используют совместно с другими командами, добавив вертикальную черту «|» и название команды grep.
Утилита входит в состав GNU, решает много задач, она может вывести на экран отсортированный текст, а также находить строки в больших файлах за миллисекунды.
Синтаксис
Рассмотрим синтаксис.
grep [параметры] шаблон [имя файла]
Или так:
Команда | grep шаблон
Здесь под параметрами понимаются аргументы, с помощью которых настраивается поиск и вывод на экран. Например нужно найти слово «линукс», и не учитывать регистр при поиске. Тогда нужно использовать опцию «-i».
Шаблон — это выражение или строка.
Имя файла — где искать.
Основные параметры:
—help. Вывести справочную информацию.
-i. Не учитывать регистр при поиске.
-V. Узнать текущую версию.
-v. Инвертированный поиск.
-s. Не выводить на экран сообщения об ошибкам. Например сообщение о несуществующих файлах.
-r. Поиск в каталогах, подкаталогах или рекурсивный grep.
-w. Искать как слово с пробелами.
-с. Опция считает количество вхождений (счетчик).
-e. Регулярные выражения.
Примеры
Найдем все файлы в текущей директории где встречается слово «linux».
grep linux ./*
Здесь:
- linux — слово которое нужно искать;
- точка — текущая директория;
- звездочка — искать во всех файлах.
Важно! По умолчанию операционная система Линукс учитывает регистр. То есть, если слово написано с большой буквы, а в поиске указано с маленькой, то grep его не найдет.
Чтобы начать поиск без учета регистра необходимо добавить аргумент «-i». В нашем примере получится так:
grep -i linux ./*
Поиск в конкретном документе. Для примера найдем в документе «test» слово «хороший». Для этого с помощью утилиты «cd» зайдем в текущую директорию, где лежит файл «test». В моем случаи он находится в домашнем каталоге, я ввожу просто «cd».
grep хороший test
Здесь:
- хороший — слово которое нужно найти;
- test — файл, где искать.
Рекурсивный поиск. Чтобы найти определенный текст в определенной директории, используют рекурсивный поиск. Для этого необходимо использовать параметр «-r». Найдем слово «vseprolinux» в домашнем каталоге root и его подкаталогах.
grep -r vseprolinux /etc/root
Найдем три слова сразу в одной строке «все про Линукс». Для этого будем использовать вертикальную черту и введет «grep» три раза.
grep «все» test | grep «про» | grep «Линукс»
Команда grep может сообщить сколько раз встречается слово. Нам поможет опция -с. Посчитаем сколько раз встречается слово «site» в документе «file».
grep -c site file
Как видно на скриншоте выше, в файле «file» три раза встречается слово «site». Однако команда также считает выражение «mysite» за «site». Как сделать чтобы mysite не попал под счетчик? Добавим опцию «-w.»
grep -cw site file
Для большей уверенности иногда слово «site» можно заключить кавычки, например когда нужно найти строку с пробелом.
Регулярные выражения.
Регулярные выражение в утилите «grep» — это мощная функция, которая расширяет возможности поиска. Чтобы активировать эту функцию или режим, используется аргумент «-e».
Символы в выражениях:
- $ — конец строки;
- ^ — начало строки;
- [] — указывается диапазон значений или конкретные через запятую.
Найдем цифры 1-5 в документе «file».
grep [1-5] file
В скобках написано диапазон значений от одного до пяти, также можно написать конкретные значения через запятую, так: [1,2,3,4,5]
Grep — Ай да Linux Wiki
Введение
Команда grep, одна из самых известных и употребительных команд Юниксовидных ОС, ведет свое начало от первого текстового редактора Юникс — ed. В этом редакторе была команда g/re/p (global/regular expression/print), которая и дала свое название новой программе.
Команда grep служит для поиска строк, содержащих заданный пользователем образец.
grep ОБРАЗЕЦ имя_файла
Причем обязательным для ввода является только ОБРАЗЕЦ, можно обойтись даже без имени файла (аргумента).
Команда grep без опций и аргумента.
Если не указано имени файла, то команда обрабатывает стандартный ввод, например строки, набранные на клавиатуре:
grep кот у меня есть кошка,(Enter) вернее это кот,(Enter) вернее это кот, который умеет(Enter) который умеет ловить мышей.(Enter) (Ctrl+c)
В скобках показано, когда я нажимал клавишу Enter, чтобы перейти на новую строку. Одновременно, при нажатии Enter, программа выводила строки, содержащие ОБРАЗЕЦ (кот), отсюда и удвоение этих строк. Видно, что команда реагировала просто на сочетание букв, а не на слово «кот», иначе строка со словом «который» не попала бы в вывод.
Тут мы подошли к очень важному определению строки.
Строкой команда grep (как и все остальные команды Юникс) считает все символы, находящиеся между двумя символами новой строки. Эти невидимые на экране символы возникают в тексте каждый раз, когда пользователь нажимает клавишу Enter. В Юниксовидных системах символ новой строки обозначается обратным слэшем с буквой n (\n). Таким образом, строка может быть любого размера, начиная с одного символа и до многомегабайтного текста. И команда grep честно выведет эту строку, при условии, что она содержит ОБРАЗЕЦ.
Работа с файлами
Команда grep может обрабатывать любое количество файлов одновременно. Создадим три файла:
123.txt: alice.txt: ast.txt: 1234 Алиса очень Символ астериска 5678 красивая девочка, обозначается (*) 89*0 у нее такая ****** звездочкой. длинная коса!
И дадим команду:
grep '*' 123.txt ast.txt alice.txt 123.txt:89*0 ast.txt:обозначается (*). alice.txt:у нее такая ******
В выводе перечислены файлы, и указано, в каком из них какая строка содержит символ астериска. ОБРАЗЕЦ (*) пришлось взять в кавычки, чтобы командный интерпретатор понял, что имеется в виду символ, а не условный знак. Попробуйте без кавычек, увидите — ничего не получится.
Команда grep вовсе не ограничена одним выражением в качестве ОБРАЗЦА, можно задавать хоть целые фразы. Только их нужно заключать в кавычки (одинарные или двойные):
grep 'ная ко' 123.txt ast.txt alice.txt alice.txt:длинная коса!
Возможности поиска при помощи команды grep могут быть значительно расширены применением групповых символов. Например, уже упоминавшийся астериск (звездочка) используется для представления любого символа или группы символов, если речь идет о тексте, и любого файла или группы файлов, если речь идет о директории.
Создадим директорию /example, в которую поместим файлы наших примеров: 123.txt, ast.txt, alice.txt и дадим команду:
grep '*' example/* example/123.txt:89*0 example/alice.txt:у нее такая ****** example/ast.txt:обозначается (*)
То есть мы приказали просмотреть все файлы директории /example. Таким способом можно обследовать такие огромные директории как /usr, /dev, и любые другие.
Параметры grep
Опция -r
—recursive
Еще больше увеличит зону поисков опция -r, которая заставит команду grep рекурсивно обследовать все дерево указанной директории, то есть субдиректории, субдиректории субдиректорий, и так далее вплоть до файлов. Например:
grep -r menu /boot /boot/grub/grub.txt:Highlight the menu entry you want to edit and press 'e', then
/boot/grub/grub.txt:Press the [Esc] key to return to the GRUB menu.
/boot/grub/menu.lst:# GRUB configuration file ‘/boot/grub/menu.lst’.
/boot/grub/menu.lst:gfxmenu (hd0,3)/boot/message
Опция -i
—ignore-case
Приказывает команде игнорировать регистр символов, таким образом, поиск будет производиться как среди заглавных, так и среди строчных букв.
Опция -c
—count
Эта опция не выводит строки, а подсчитывает количество строк, в которых обнаружен ОБРАЗЕЦ. Например:
grep -c root /etc/group 8
То есть в восьми строках файла /etc/group встречается сочетание символов root.
Опция -n
—line-number
При использовании этой опции вывод команды grep будет указывать номера строк, содержащих ОБРАЗЕЦ:
grep -n print /etc/printcap 1:# /etc/printcap 3:# See "man printcap" for information on editing this file. 5:# In most cases it is better to use a tool to write the printcap 9:# cupsd print daemon at this URL: http://localhost:631
Опция -v
—invert-match
Выполняет работу, обратную обычной — выводит строки, в которых ОБРАЗЕЦ не встречается:
grep -v print /etc/printcap # # # for you (at least initially), such as apsfilter # (/usr/share/apsfilter/SETUP, used in conjunction with the # LPRng lpd daemon), or with the web interface provided by the # (if you use CUPS).
Опция -w
—word-regexp
Заставит команду grep искать только строки, содержащие все слово или фразу, составляющую ОБРАЗЕЦ. Например:
grep -w "длинная ко" example/*
Не дает вывода, то есть не находит строк, содержащих выражение «длинная ко». А вот команда:
grep -w "длинная коса" example/* example/alice.txt:длинная коса!
находит точное соответствие в файле alice.txt.
Опция -x
—line-regexp
Еще более строгая. Она отберет только те строки исследуемого файла или файлов, которые полностью совпадают с ОБРАЗЦОМ.
grep -x "1234" example/* example/123.txt:1234
Внимание: Мне попадались (на собственном компьютере) версии grep (например, GNU 2.5), в которых опция -x работала неадекватно. В то же время, другие версии (GNU 2.5.1) работали прекрасно. Если что-то не ладится с этой опцией, попробуйте другую версию, или обновите свою.
Опция -l
—files-with-matches
Команда grep с этой опцией не возвращает строки, содержащие ОБРАЗЕЦ, но сообщает лишь имена файлов, в которых данный образец найден:
grep -l 'Алиса' example/* example/alice.txt
Замечу, что сканирование каждого из заданных файлов продолжается только до первого совпадения с ОБРАЗЦОМ.
Опция -L
—files-without-match
Наоборот, сообщает имена тех файлов, где не встретился ОБРАЗЕЦ:
grep -L 'Алиса' example/* example/123.txt example/ast.txt
Как мы имели случай заметить, команда grep, в поисках соответствия ОБРАЗЦУ, просматривает только содержимое файлов, но не их имена. А так часто нужно найти файл по его имени или другим параметрам, например времени модификации! Тут нам придет на помощь простейший программный канал (pipe). При помощи знака программного канала — вертикальной черты (|) мы можем направить вывод команды ls, то есть список файлов в текущей директории, на ввод команды grep, не забыв указать, что мы, собственно, ищем (ОБРАЗЕЦ). Например:
ls | grep grep grep/ grep-ru.txt
Находясь в директории Desktop, мы «попросили» найти на Рабочем столе все файлы, в названии которых есть выражение «grep». И нашли одну директорию grep/ и текстовой файл grep-ru.txt, который я в данный момент и пишу.
Если мы хотим искать по другим параметрам файла, а не по его имени, то следует применить команду ls -l, которая выводит файлы со всеми параметрами:
ls -l | grep 2008-12-30 -rw-r--r-- 1 ya users 27 2008-12-30 08:06 123.txt drwxr-xr-x 2 ya users 4096 2008-12-30 08:49 example/ -rw-r--r-- 1 ya users 11931 2008-12-30 14:59 grep-ru.txt
И вот мы получили список всех файлов, модифицированных 30 декабря 2008 года.
Команда grep незаменима при просмотре логов и конфигурационных файлов. Классически примером использования команды grep стал программный канал с командой dmesg. Команда dmesg выводит те самые сообщения ядра, которые мы не успеваем прочесть во время загрузки компьютера. Допустим, мы подключили через USB порт новый принтер, и теперь хотим узнать, как ядро «окрестило» его. Дадим такую команду:
dmesg | grep -i usb
Опция -i необходима, так как usb часто пишется заглавными буквами. Проделайте этот пример самостоятельно — у него длинный вывод, который не укладывается в рамки данной статьи.
Немного хитростей
Если продолжить описание множества опций команды grep, то статья станет утомительной и нечитаемой. Поэтому, рассмотрев необходимый минимум опций, можно развлечься всякими хитростями при применении этой замечательной команды.
Хитрость первая
Как заставить grep указать в выводе имя файла, где найдено соответствие ОБРАЗЦУ? Например, мы хотим найти строку, содержащую выражение «красивая девочка» в файле alice.txt, да так, чтобы в выводе фигурировало имя файла (для отчета). Если просто дать команду:
grep -w 'красивая девочка' alice.txt красивая девочка,
То никакого имени файла там не будет. Но стоит добавить в аргументы еще один файл, как все заработает. Обычно, чтобы избежать неожиданностей, указывают файл /dev/null:
grep -w 'красивая девочка' alice.txt /dev/null alice.txt:красивая девочка,
Хитрость вторая
Используя «чистые» опции команды grep, мы можем получить все строки, содержащие ОБРАЗЕЦ либо в составе других слов (без опций), либо в виде заданного слова (опция -w). А как найти слова, которые заканчиваются на -ОБРАЗЕЦ или начинаются с ОБРАЗЕЦ-? Для этого существуют специальные значки: \< означает, что ОБРАЗЕЦ будет началом слова, и \>, означающий, что ОБРАЗЕЦ будет концом слова.
grep 'kot' kot.txt kot kotoroe antrekot kotovasiya okot skotobaza nekotoroe
Это был файл kot.txt целиком.
grep 'kot\>' kot.txt kot antrekot okot
А это были слова, оканчивающиеся на -kot.
grep '\<kot' kot.txt kot kotoroe kotovasiya
Эти начинаются на kot-.
grep '\<kot\>' kot.txt kot
А вот был «чистый» кот.
Прошу простить за транслитерацию, но с нашими буквами эта хитрость как-то не срабатывает, а с английскими словами не все поймут.
Хитрость третья
Как быть, если ОБРАЗЕЦ начинается с дефиса, ведь команда примет его за опцию?
Попробуем:
grep '--анонимность' anonim.txt grep: unrecognized option `--анонимность'
Так и есть — принимает за опцию. Ну так дадим ей опцию -e, которая означает: «Воспринимать ОБРАЗЕЦ только как образец».
grep -e '--анонимность' anonim.txt --анонимность
Совсем другое дело.
Хитрость четвертая
Как посмотреть соседние строчки?
grep -C 2 -e '--анонимность' anonim.txt
Требуется соблюсти следующие условия:
--анонимность --секретность --неразглашение.
Просмотр вверх и вниз на две строки.
grep -A 1 -e '--анонимность' anonim.txt --анонимность --секретность
Просмотр вниз на одну строку.
grep -B 1 -e '--анонимность' anonim.txt
Требуется соблюсти следующие условия:
--анонимность
Просмотр вверх на одну строку.
Хитрость пятая
grep -r menu /boot Бинарный файл /boot/grub/stage2 совпадает Бинарный файл /boot/grub/stage2_eltorito совпадает /boot/grub/grub.txt:Highlight the menu entry you want to edit and press 'e', then /boot/grub/grub.txt:Press the [Esc] key to return to the GRUB menu. /boot/grub/menu.lst:# GRUB configuration file '/boot/grub/menu.lst'. /boot/grub/menu.lst:gfxmenu (hd0,3)/boot/message
Что означают сообщения в первых двух строках вывода?
Сообщение «Бинарный файл совпадает» («Binary file matches») появляется, когда совпадение с образцом встречается в бинарных файлах. Если бы grep вывел строки из таких файлов на дисплей, толку было бы немного, а на дисплее могла возникнуть неразбериха (а может быть, и чего похуже, если драйвер терминала воспримет какие-либо фрагменты бинарного файла как команды). Если вы хотите все-таки увидеть эти строки, то применяйте опцию -a или —binary-files=text. Если хотите подавить вывод сообщений «Бинарный файл совпадает», то применяйте опцию -I или —binary-files=without-match.
Хитрость шестая
Как искать строки, содержащие несколько ОБРАЗЦОВ?
Применить программный канал, канализируя вывод одной команды grep с вводом следующей команды grep.
grep 'у' example/* | grep '*' example/alice.txt:у нее такая ******
Первый grep ищет у нас «у», а второй — «*» и оба находят искомое в одной строке: «у нее такая ******». Можно сделать эту цепочку команд grep любой длины, было бы чего искать, да строчки достаточно длинные 🙂
Хитрость седьмая
Можно ли искать одновременно в стандартном вводе и в файле?. Можно, если перед именем файла поставить дефис:
echo многие употребляют астериск неправильно | grep 'астериск' - example/* (стандартный ввод):многие употребляют астериск неправильно example/ast.txt:Символ астериска
Внимание: Если перед дефисом и после него не будет пробелов, то команда не сработает.
Но настало время вернуться к опциям команды grep.
Пока я занимался хитростями, успел позабыть, какие из опций уже описал, а какие нет. Поэтому я дал команду:
grep 'Опция' grep-ru.txt > option.txt
и получил файл option.txt, в котором перечислены все фигурирующие в файле grep-ru.txt опции.
Общее количество опций программы подавляет, поэтому пойдем по алфавиту, пропуская те, что я уже описал.
Опция -f имя_файла --file=имя_файла
Весьма полезная опция, когда нужно искать несколько ОБРАЗЦОВ, причем не в одной строке, как мы делали в шестой Хитрости, а в разных. Для того чтобы воспользоваться этой опцией, нужно составить файл, в котором поместить искомые ОБРАЗЦЫ по одному на строчке:
pattern.txt: nobody root ya
А затем дать команду:
grep -f pattern.txt /etc/passwd nobody:x:65534:65533:nobody:/var/lib/nobody:/bin/bash root:x:0:0:root:/root:/bin/bash ya:x:1000:100:alex dmitriev:/home/ya:/bin/bash
Предупреждение: Эта полезная опция, к сожалению, работает не на всех версиях grep. На версии GNU grep 2.5 работает неадекватно, а на GNU grep 2.5.1 — прекрасно. Так что обновляйтесь, господа. Текущая стабильная версия GNU grep — 2.5.3.
Опция -o
—only-matching
Возвращает не всю строку, где найдено соответствие ОБРАЗЦУ, а только совпадающую с ОБРАЗЦОМ часть строки.
Без опции -o:
$ grep ‘английскими’ grep-ru.txt
Прошу простить за транслитерацию, но с нашими буквами как-то эта хитрость не срабатывает,
а с английскими словами не все поймут.
А вот с опцией -o:
grep -o 'английскими' grep-ru.txt английскими
Опция -q
—quiet —silent
Ничего не выдает на стандартный вывод. В случае нахождения соответствия с ОБРАЗЦОМ немедленно отключается с нулевым статусом. Отключается также при обнаружении ошибки. Для чего это — не знаю. У меня получалось, что программа мгновенно прекращает работу, есть ли совпадения, нет ли, без всяких сообщений, в том числе и о нулевом статусе. Опробовал обе доступные версии grep.
Опция -s
—no-messages
Подавляет сообщения о несуществующих или нечитаемых файлах.
Предупреждение: традиционные версии последних двух опции (-q и -s) не соответствуют стандарту POSIX.2 и не совпадают с GNU версиями. Поэтому их нельзя применять в скриптах для командной оболочки. Просто перенаправляйте вывод на /dev/null.
Опции — расширения GNU
Опции
-A —after-context=ЧИСЛО_СТРОК
-B —before-context=ЧИСЛО_СТРОК
-C —context=ЧИСЛО_СТРОК
С этими тремя опциями мы уже познакомились в четвертой Хитрости, они позволяют посмотреть соседние строки. -A: количество строк после совпадения с ОБРАЗЦОМ,
-B: количество строк перед совпадением, и -C: количество строк вокруг совпадения.
Опция —colour[=КОГДА]
Выделяет найденные строки цветом. Значения КОГДА могут быть: never (никогда), always (всегда), или auto. Пример:
grep -o 'английскими' --color grep-ru.txt английскими
Опция -D ДЕЙСТВИЕ
—devices=ДЕЙСТВИЕ
Если исследуемый файл является файлом устройства, FIFO (именованным каналом) или сокетом, то следует применять эту опцию. ДЕЙСТВИЙ всего два: read (прочесть), и skip (пропустить). Если вы указываете ДЕЙСТВИЕ read (используется по умолчанию), то программа попытается прочесть специальный файл, как если бы он был обычным файлом; если указываете ДЕЙСТВИЕ skip, то файлы устройств, FIFO и сокеты будут молча проигнорированы.
Опция -d ДЕЙСТВИЕ
—directories=ДЕЙСТВИЕ
Если входной файл является директорией, то используйте эту опцию. ДЕЙСТВИЕ read (прочесть) попытается прочесть директорию как обычный файл (некоторые ОС и файловые системы запрещают это; тогда появятся соответствующие сообщения, либо директории молча пропустят). Если ДЕЙСТВИЕ skip (пропустить), то директории будут молча проигнорированы. Если ДЕЙСТВИЕ recurse (рекурсивно), то grep будет просматривать все файлы и субдиректории внутри заданного каталога рекурсивно. Это эквивалент опции -r, с которой мы уже познакомились.
Опция -H
—with-filename
Выдает имя файла для каждого совпадения с ОБРАЗЦОМ. Мы успешно делали это без всяких опций в Хитрости второй.
Опция -h
—no-filename
Подавляет вывод имен файлов, когда задано несколько файлов для исследования.
Опция -I
Обрабатывает бинарные файлы как не содержащие совпадений с ОБРАЗЦОМ; эквивалент опции —binary-files=without-match.
Опция —include=ОБРАЗЕЦ_имени_файла
При рекурсивном исследовании директорий обследовать только файлы, содержащие в своем имени ОБРАЗЕЦ_имени_файла.
Опция —exclude=ОБРАЗЕЦ_имени_файла
При рекурсивном исследовании директорий пропускать файлы, содержащие в своем имени ОБРАЗЕЦ_имени_файла.
Опция -m ЧИСЛО_СТРОК
—max-count=ЧИСЛО_СТРОК
Прекратить обработку файла после того, как количество совпадений с ОБРАЗЦОМ достигнет ЧИСЛА_СТРОК:
grep -m 2 'kot' kot.txt kot kotoroe
Опция -y
Синоним опции -i (не различать верхний и нижний регистр символов).
Опции -U и -u применяются только под MS-DOS и MS-Windows, тут нечего о них говорить.
Опция —mmap
Использует системный вызов mmap вместо системного вызова read. Может дать лучшую производительность, а может привести к ошибкам. Это для продвинутых пользователей.
Опция -Z
—null
Если в выводе программы имена файлов (например при опции -l), то опция -Z после каждого имени файла выводит нулевой байт вместо символа новой строки (как обычно происходит). Это делает вывод однозначным, даже если имена файлов содержат символы новой строки. Эта опция может быть использована совместно с такими командами как: find -print0, perl -0, sort -z, xargs -0 для обработки файловых имен, составленных необычно, даже содержащих символы новой строки.
(Хотел бы я знать, как можно включить символ новой строки в имя файла. Если кто знает, не поленитесь — сообщите мне.)
Опция -z
—null-data
Рассматривает ввод как набор строк, каждая из которых заканчивается не символом новой строки, а нулевым байтом. Как и предыдущая опция, используется совместно с вышеперечисленными командами для обработки экзотических имен файлов.
Команда grep и регулярные выражения
Регулярные выражения (Regular Expressions) это система синтаксического разбора текстовых фрагментов по формализованному шаблону, основанная на системе записи ОБРАЗЦОВ для поиска. Проще говоря, регулярное выражение — тот же, уже привычный нам ОБРАЗЕЦ для поиска, только составленный по определенным правилам. Как математические формулы составляются при помощи набора операторов (плюс, минус, степень, корень и прочее), так и регулярные выражения конструируются при помощи различных операторов (?, *, +, {n} и прочие).
Тема регулярных выражений настолько обширна, что требует для своего освещения отдельной статьи; в данной статье мы не будем ее подробно разбирать. Скажу лишь, что существует несколько версий синтаксиса регулярных выражений: Базовый (basic) BRE, Расширенный (extended) ERE и регулярные выражения языка Perl.
Опция -G
—basic-regexp
Рассматривает ОБРАЗЕЦ как базовое регулярное выражение. Эта опция используется по умолчанию.
Опция -E
—extended-regexp
Рассматривает ОБРАЗЕЦ как расширенное регулярное выражение.
Опция -P
—perl-regexp
Рассматривает ОБРАЗЕЦ как регулярное выражение языка Perl.
Опция -F
—fixed-strings
Рассматривает ОБРАЗЕЦ как список «фиксированных выражений» (fixed strings — термин из области регулярных выражений), разделенных символами новой строки. Будет искать соответствия любому из них.
Кроме того, существуют две альтернативные команды EGREP и FGREP. Обе они соответствуют опциям -E и -F соответственно.
Опции —help и —version (-V) общеизвестны, и я не буду на них останавливаться.
Команда grep и символы кириллицы.
Читая эту статью, вы не могли не заметить, что большинство примеров составлено на русском языке. Я еще не встречал консольных команд, столь хорошо «владеющих русским». Теперь, когда я разобрался с этой командой, то уже не понимаю, как мог обходиться без нее при написании статей (по-русски, разумеется). Лишь некоторые опции «дают прокол» при обработке символов кириллицы.
Резюме команды grep
Команда grep настолько полезна, многофункциональна и проста в употреблении, что, однажды познакомившись с ней, невозможно представить себе работы без нее. Особенно полезна эта команда в качестве фильтра в составе программных каналов (pipes).
Ссылки
open-club.ru
Grep — Ай да Linux Wiki
Введение
Команда grep, одна из самых известных и употребительных команд Юниксовидных ОС, ведет свое начало от первого текстового редактора Юникс — ред. В этом редакторе была команда g / re / p (глобальное / регулярное выражение / печать), которая и дала свое название новой программе.
Команда grep служит для поиска строк, заданный образец.
grep ОБРАЗЕЦ имя_файла
Причем обязательным для ввода является только ОБРАЗЕЦ, можно обойтись даже без имени файла (аргумента).
Команда grep без опций и аргумента.
Если не указано имени файла, то команда обрабатывает стандартный ввод, например строки, набранные на клавиатуре:
grep кот у меня есть кошка, (Enter) вернее это кот, (Enter) вернее это кот, который умеет (Enter) который умеет ловить мышей. (Enter) (Ctrl + c)
В скобках показано, когда я нажимал нажимал Enter, чтобы перейти на новую строку. Одновременно, при нажатии Enter, программа выводила, содержащая ОБРАЗЕЦ (кот), отсюда и удвоение этих строк.Видно, что команда реагировала просто сочетание букв, а не на слово «кот», другая строка со словом «который» не попала бы в вывод.
Тут мы подошли к очень важному определению строки.
Строкой команда grep (как и все остальные команды Юникс) считает все символы, находящиеся между двумя символами новой строки. Эти невидимые на экране показаны в тексте каждый раз, когда пользователь нажимает кнопку Enter. В Юниксовидных системах символ новой строки обозначается обратным слэшем с буквой n (\ n).Таким образом, строка может быть любого размера, начиная с одного символа и до многомегабайтного текста. И команда grep честно выведет эту строку, при условии, что она содержит ОБРАЗЕЦ.
Работа с файлами
Команда grep может обрабатывать любое количество файлов одновременно. Создадим три файла:
123.txt: alice.txt: ast.txt: 1234 Алиса очень Символ астериска 5678 красивая девочка, обозначается (*) 89 * 0 у нее такая ****** звездочкой.длинная коса!
И дадим команду:
grep '*' 123.txt ast.txt alice.txt 123.txt: 89 * 0 ast.txt: обозначается (*). alice.txt: у нее такая ******
В выводе файлов, и указано, в каком из них какая строка содержит символ астериска. ОБРАЗЕЦ (*) пришлось взять в кавычки, чтобы командный интерпретатор понял, что имеется в виду, а не условный знак. Попробуйте без кавычек, увидите — ничего не получится.
Команда grep вовсе не ограничена одним выражением в качестве ОБРАЗЦА, можно задавать хоть целые фразы.Только их нужно заключать в кавычки (одинарные или двойные):
grep 'ная ко' 123.txt ast.txt alice.txt alice.txt: длинная коса!
Возможности поиска при помощи команд grep могут быть значительно расширены применением групповых символов. Например, уже известна астериск (звездочка) используется для представления любого символа или группы символов, если речь идет о тексте, и любом файла или группы файлов, если речь идет о директории.
Создадим директорию / пример, в котором поместим файлы наших примеров: 123.txt, ast.txt, alice.txt и дадим команду:
grep '*' пример / * пример / 123.txt: 89 * 0 пример / alice.txt: у нее такая ****** пример / ast.txt: обозначается (*)
То есть мы приказали просмотреть все файлы директории / example. Таким способом можно обследовать такие огромные директории как / usr, / dev, и любые другие.
Параметры grep
Опция -r
— рекурсивный
Еще больше увеличит зона поисков опция -r, которая заставит команду grep рекурсивно обследовать все дерево директории, то есть субдиректории, субдиректории субдиректорий и так далее вплоть до файлов.Например:
grep -r меню / загрузка /boot/grub/grub.txt: выделите пункт меню, который хотите отредактировать, и нажмите 'e', затем
/boot/grub/grub.txt: нажмите клавишу [Esc], чтобы вернуться в меню GRUB.
/boot/grub/menu.lst:# Файл конфигурации GRUB ‘/boot/grub/menu.lst’.
/boot/grub/menu.lst:gfxmenu (hd0,3) / загрузка / сообщение
Опция -i
— игнорирование дела
Приказывает команду игнорировать символы, таким образом, поиск будет производиться как среди заглавных, так и среди строчных букв.
Опция -c
—счет
Эта опция не выводит строки, а подсчитывает количество строк, в которых указывается ОБРАЗЕЦ. Например:
grep -c корень / и т.д. / группа 8
То есть в восьмиах файла / etc / group встречается сочетание символов root.
Опция -n
— номер строки
При использовании этой опции команды grep будет указывать номера строк, введении ОБРАЗЕЦ:
grep -n печать / и т. Д. / Printcap 1: # / etc / printcap 3: # См. "Man printcap" для получения информации о редактировании этого файла.5: # В большинстве случаев лучше использовать инструмент для написания printcap 9: # демон печати cupsd по этому URL: http: // localhost: 631
Опция -v
— обратное совпадение
Выполняет работу, обратную обычную — выводит строки, в которых ОБРАЗЕЦ не встречается:
grep -v print / etc / printcap # # # для вас (по крайней мере, изначально), например apsfilter # (/ usr / share / apsfilter / SETUP, используется вместе с # LPRng lpd daemon) или с помощью веб-интерфейса, предоставляемого # (если вы используете CUPS).
Опция -w
—слово-регулярное выражение
Заставит команду grep искать только строки, составляющую все слово, составляющее ОБРАЗЕЦ. Например:
grep -w "длинная ко" example / *
Не дает вывода, то есть не находит строки, выражение «ко». А вот команда:
grep -w "длинная коса" пример / * пример / alice.txt: длинная коса!
находит точное соответствие в файле alice.txt.
Опция -x
— строка-регулярное выражение
Еще более строгая.Она отберет те строки, совпадающие с ОБРАЗЦОМ.
grep -x "1234" пример / * пример / 123.txt: 1234
Внимание: Мне попадались (на собственном компьютере) версии grep (, GNU 2.5), в которых опция -x работала неадекватно. В то же время, другие версии (GNU 2.5.1) работали прекрасно. Если что-то не ладится с этой опцией, попробуйте другую версию, или обновите свою.
Опция -l
— файлы с совпадениями
Команда grep с этой опцией не возвращает строку, содержащую ОБРАЗЕЦ, но сообщает лишь имена файлов, в данном образце найден:
grep -l 'Алиса' пример / * пример / алиса.текст
Замечу, что сканирование каждого из заданных файлов продолжается только до первого совпадения с ОБРАЗЦОМ.
Опция -L
— файлы без совпадений
Наоборот, сообщает имена тех файлов, где не встретился ОБРАЗЕЦ:
grep -L 'Алиса' пример / * пример / 123.txt пример / ast.txt
Как мы имели случай заметить, команда grep, в поисках соответствия ОБРАЗЦУ, просматривает только содержимое файлов, но их имена. А так часто нужно найти файл по его имени или другим параметрам, например времени модификации! Тут нам придет на помощь простейший программный канал (труба).При помощи знака программного канала — вертикальной черты (|) мы можем направить вывод команды ls, то есть список файлов в текущей директории, на ввод команды grep, не забыв указать, что мы, собственно, ищем (ОБРАЗЕЦ). Например:
ls | grep grep grep / grep-ru.txt
Находясь в директории Desktop, мы «попросили» найти на Рабочем столе все файлы, в названии которых есть выражение «grep». И нашли одну директорию grep / и текстовой файл grep-ru.txt, который я в данный момент и пишу.
. Если мы хотим найти другие параметры файла, а не по его имени, то следует применить команду ls -l, которая приведет файлы со всеми объектами:
ls -l | grep 30 декабря 2008 г. -rw-r - r-- 1 лет юзеры 27 2008-12-30 08:06 123.txt drwxr-xr-x 2 ya users 4096 30.12.2008 08:49 example / -rw-r - r-- 1 лет пользователи 11931 30.12.2008 14:59 grep-ru.txt
И вот мы получили список всех файлов, модифицированных 30 декабря 2008 года.
Команда grep незаменима при просмотре логов и конфигурационных файлов.Классически примером использования команды grep стал программный канал с командой dmesg. Команда dmesg выводит самые последние сообщения ядра. Допустим, мы подключили через USB порт новый принтер, и теперь хотим узнать, как ядро »добавило его». Дадим такую команду:
dmesg | grep -i usb
Опция -i необходима, так как usb часто пишется заглавными буквами. Проделайте этот пример самостоятельно — у него длинный вывод, который не укладывается в рамки данной статьи.
Немного хитростей
Если описание множества опций команды grep, то статья станет утомительной и нечитаемой. Поэтому, рассмотрев необходимого минимум опций, можно развлечься всякими хитростями при применении этой замечательной команды.
Хитрость первая
Как заставить grep указать в выводе имя файла, где найдено соответствие ОБРАЗЦУ? Например, мы хотим найти строку, содержащую выражение «красивая девочка» в файле alice.txt, да так, чтобы в выводе фигурировало имя файла (для отчета).Если просто дать команду:
grep -w 'красивая девочка' alice.txt красивая девочка,
То никакого имени файла там не будет. Но стоит добавить в аргументы еще один файл, как все заработает. Обычно чтобы избежать неожиданностей, укажите файл / dev / null:
grep -w 'красивая девочка' alice.txt / dev / null alice.txt: красивая девочка,
Хитрость вторая
Используя «чистые» команды опции grep, мы можем получить все строки, содержащее ОБРАЗЕЦ либо в составе других слов (без опций), либо в виде заданного слова (опция -w).А как найти слова, которые заканчиваются на -ОБРАЗЕЦ или начинаются с ОБРАЗЕЦ-? Для этого существуют специальные значки: \ <означает, что ОБРАЗЕЦ будет началом слова, и \>, означающий, что ОБРАЗЕЦ будет концом слова.
grep 'kot' kot.txt кот которое антрекот котовасия окот скотобаза некоторое
Это был файл kot.txt целиком.
grep 'кот \>' kot.txt кот антрекот окот
А это были слова, оканчивающиеся на -kot.
grep '\ <кот' кот.текст кот которое котовасия
Эти начинаются на kot-.
grep '\ <кот \>' kot.txt кот
А вот был "чистый" кот.
Прошу простить за транслитерацию, но с нашими буквами этарость как-то не срабатывает, а с английскими словами не все поймут.
Хитрость третья
Как быть, если ОБРАЗЕЦ начинается с дефиса, ведь команда примет его за опцию?
Попробуем:
grep '--анонимность' anonim.txt grep: нераспознанная опция `--анонимность '
Так и есть - принимает за опцию.Ну так дадим ей опцию -e, которая означает: "Воспринимать ОБРАЗЕЦ только как образец".
grep -e '--анонимность' anonim.txt --анонимность
Совсем другое дело.
Хитрость четвертая
Как посмотреть соседние строчки?
grep -C 2 -e '--анонимность' anonim.txt
Требуется соблюсти следующие условия:
--анонимность --секретность --неразглашение.
Просмотр вверх и вниз на две строки.
grep -A 1 -e '--анонимность' anonim.текст --анонимность --секретность
Просмотр вниз на одну строку.
grep -B 1 -e '--анонимность' anonim.txt
Требуется соблюсти следующие условия:
--анонимность
Просмотр вверх на одну строку.
Хитрость пятая
grep -r меню / загрузка Бинарный файл / boot / grub / stage2 совпадает Бинарный файл / boot / grub / stage2_eltorito совпадает /boot/grub/grub.txt: выделите пункт меню, который хотите отредактировать, и нажмите 'e', затем / boot / grub / grub.txt: нажмите клавишу [Esc], чтобы вернуться в меню GRUB. /boot/grub/menu.lst:# Файл конфигурации GRUB '/boot/grub/menu.lst'. /boot/grub/menu.lst:gfxmenu (hd0,3) / загрузка / сообщение
Что означают сообщения в первых двух строках вывода?
Сообщение «Бинарный файл совпадает» («Совпадает двоичный файл») появляется, когда встречается совпадение с бинарным образцом файла. Если бы grep вывел строки из таких файлов на дисплее, толку было бы немного, а на экране дисплея неразбериха (может быть, и чего похуже, если драйвер терминала воспримет какие-либо фрагменты бинарного файла как команды).Если вы хотите все-таки увидеть эти строки, то применяйте опцию -a --binary-files = text. Если хотите подавить вывод сообщений "Бинарный файл совпадает", то применяйте опцию -I или --binary-files = without-match.
Хитрость шестая
Как искать строки, содержащий несколько ОБРАЗЦОВ?
Применить программный канал, канализируя вывод одной команды grep с вводом следующей команды grep.
grep 'у' example / * | grep '*' пример / alice.txt: у нее такая ******
Первый grep ищет у нас "у", а второй - "*" и оба находят искомое в одной строке: "у нее такая ******".Можно сделать эту эту командочку grep любой длины, было бы чего искать, да строчки достаточно длинные 🙂
Хитрость седьмая
Можно ли искать одновременно в стандартном вводе и в файле ?. Можно, если перед именем файла поставить дефис:
echo многие употребляют астериск неправильно | grep 'астериск' - пример / * (стандартный ввод): многие употребляют астериск неправильно пример / ast.txt: Символ астериска
Внимание: Если перед дефисом и после него не будет пробелов, то команда не сработает.
Но настало время вернуться к опциям команды grep.
Пока я занимался хитростями, успел позабыть, какие из опций уже описал, а какие нет. Поэтому я дал команду:
grep 'Опция' grep-ru.txt> option.txt
и получил файл option.txt, в котором все фигурирующие в файле grep-ru.txt опции.
Общее количество опций программы подавляет, поэтому пойдем по алфавиту, пропуская те, что я уже описал.
Опция -f имя_файла --file = имя_файла
Весьма полезная опция, когда нужно искать несколько ОБРАЗЦОВ, причем не в одной строке, как мы делали в шестой Хитрости, а в разных.Для того, чтобы использовать эту опцию, нужно составить файл, в котором используется искомые ОБРАЗЦЫ по одному на строчке:
pattern.txt: никто корень я
А затем дать команду:
grep -f шаблон.txt / etc / passwd никто: x: 65534: 65533: никто: / var / lib / никто: / bin / bash корень: x: 0: 0: корень: / корень: / bin / bash я: х: 1000: 100: алексей дмитриев: / home / ya: / bin / bash
Предупреждение: Эта полезная опция, к сожалению, работает не на всех версиях grep.На версии GNU grep 2.5 работает неадекватно, а на GNU grep 2.5.1 - прекрасно. Так что обновляйтесь, господа. Текущая стабильная версия GNU grep - 2.5.3.
Опция -o
- только соответствие
Возвращает не всю строку, где найдено соответствие ОБРАЗЦУ, совпадающая с ОБРАЗЦОМ часть строки.
Без опции -o:
$ grep 'английскими' grep-ru.txt
Прошу простить за транслитерацию, но с нашими буквами как-то эта хитрость не срабатывает,
а с английскими словами не все поймут.
А вот с опцией -o:
grep -o 'английскими' grep-ru.txt английскими
Опция -q
- тихий - тихий
Ничего не выдает на стандартный вывод. В случае нахождения соответствия с ОБРАЗЦОМ немедленно отключается с нулевым статусом. Отключается также при обнаружении ошибки. Для чего это - не знаю. У меня получалось, что программа мгновенно прекращает работу, есть совпадения, нет ли, без всяких сообщений, в том числе и о нулевом статусе.Опробовал обе доступные версии grep.
Опция -s
- сообщений нет
Подавляет сообщения о несуществующих или нечитаемых файлов.
Предупреждение: традиционные версии последних двух вариантов (-q и -s) не соответствуют стандарту POSIX.2 и не совпадают с версией GNU. Поэтому их нельзя применять в скриптах для командной оболочки. Просто перенаправляйте вывод на / dev / null.
Опции - расширения GNU
Опции
-A --after-context = ЧИСЛО_СТРОК
-B --before-context = ЧИСЛО_СТРОК
-C --context = ЧИСЛО_СТРОК
С этими тремя опциями мы уже познакомились в четвертой Хитрости, они позволяют посмотреть соседние строки.-A: количество строк после совпадения с ОБРАЗЦОМ,
-B: количество строк перед совпадением, и -C: количество строк перед совпадением.
Опция --colour [= КОГДА]
Выделяет найденные строки цветом. Значения КОГДА могут быть: никогда (никогда), всегда (всегда), или авто. Пример:
grep -o 'английскими' --color grep-ru.txt английскими
Опция -D ДЕЙСТВИЕ
--devices = ДЕЙСТВИЕ
Если исследуемый файл является файлом устройства, FIFO (именованным каналом) или сокетом, следует применять эту опцию.ДЕЙСТВИЙ всего два: прочитать (прочесть), пропустить (пропустить). Если вы указываете ДЕЙСТВИЕ, прочтите (используется по умолчанию), то программа попытается прочесть специальный файл, как если бы он был обычным файлом; если указываете ДЕЙСТВИЕ skip, то файлы устройств, FIFO и сокеты будут молча проигнорированы.
Опция -d ДЕЙСТВИЕ
--directories = ДЕЙСТВИЕ
Если входной файл является директорией, то використовуйте эту опцию. ДЕЙСТВИЕ прочтите (прочесть) попытается прочесть директорию как обычный файл (некоторые ОС и файловые системы запрещают это; тогда появятся соответствующие сообщения, либо директории молча пропустят).Если ДЕЙСТВИЕ пропустить (пропустить), то директории будут молча проигнорированы. Если ДЕЙСТВИЕ рекурсивно (рекурсивно), то grep будет просматривать все файлы и субдиректории внутри заданного каталога рекурсивно. Это эквивалент опции -r, с которой мы уже познакомились.
Опция -H
- с именем файла
Выдает имя файла для каждого совпадения с ОБРАЗЦОМ. Мы успешно делали это без всяких опций в Хитрости второй.
Опция -h
- без имени файла
Подавляет вывод имен файлов, когда задано несколько файлов для исследования.
Опция -I
Обрабатывает бинарные файлы как исключение с ОБРАЗЦОМ; эквивалент опции --binary-files = without-match.
Опция --include = ОБРАЗЕЦ_имени_файла
При рекурсивном исследовании директорий обследовать только файлы, содержащие в своем имени ОБРАЗЕЦ_имени_файла.
Опция --exclude = ОБРАЗЕЦ_имени_файла
При рекурсивном исследовании директорий пропускать файлы, содержащие в своем имени ОБРАЗЕЦ_имени_файла.
Опция -m ЧИСЛО_СТРОК
--max-count = ЧИСЛО_СТРОК
Прекратить количество обработки файла после того, как совпадение с ОБРАЗЦОМ достигнет ЧИСЛА_СТРОК:
grep -m 2 'кот' kot.txt кот которое
Опция -y
Синоним опции -i (не различать верхний и нижний регистр символов).
Опции -U и -u только под MS-DOS и MS-Windows, тут нечего о них говорить.
Опция --mmap
Использует системный вызов mmap вместо системного вызова read.Может дать лучшую производительность, а может привести к ошибкам. Это для продвинутых пользователей.
Опция -Z
- нуль
Если в выводе программы символов файлов (например, при опции -l), то опция -Z после каждого имени файла выводит нулевой байт вместо символа новой строки (как обычно происходит). Это делает вывод однозначным, даже если файлы содержат символы новой строки. Эта опция может быть предложена новой совместно с такими командами, как: find -print0, perl -0, sort -z, xargs -0 для обработки файлов имен, составленных необычно, даже символов строки.(Хотел бы я знать, как можно включить символ новой строки в имя файла. Если кто знает, не поленитесь - сообщите мне.)
Опция -z
- нулевые данные
Рассматривает как вводящий набор строк, каждую из которых заканчивается не символом новой строки, а нулевым байтом. Как и предыдущая опция используется совместно с вышеперечисленными командами для обработки экзотических файлов.
Команда grep и регулярные выражения
Регулярные выражения (регулярные выражения) это система синтаксического разбора текстовых фрагментов по формализованному шаблону, основанная на системе записи ОБРАЗЦОВ для поиска.Проще говоря, регулярное выражение - тот же, уже привычный нам ОБРАЗЕЦ для поиска, только составленный по определенным правилам. Как математические формулы составляются при помощи операторов набора (плюс, минус, корень и прочее), так и регулярные выражения конструируются при помощи различных операторов (?, *, +, {N} и прочие).
Тема регулярных расширений расширенная, что требует освещения своего отдельной статьи; в данной статье мы не будем ее подробно разбирать. Скажу, что существует несколько версий синтаксиса регулярных выражений: Базовый (базовый) BRE, Расширенный (расширенный) ERE и регулярные выражения лишь языка Perl.
Опция -G
--базик-регулярное выражение
Рассматривает ОБРАЗЕЦ как базовое регулярное выражение. Эта опция используется по умолчанию.
Опция -E
--расширенное регулярное выражение
Рассматривает ОБРАЗЕЦ как расширенное регулярное выражение.
Опция -P
--perl-regexp
Рассматривает ОБРАЗЕЦ как регулярное выражение языка Perl.
Опция -F
- фиксированные строки
Рассматривает ОБРАЗЕЦ как список "фиксированных выражений" (фиксированных строк - термин из области регулярных выражений), разделенных символами новой строки.Будет искать соответствующее из них.
Кроме того, существуют две альтернативные команды EGREP и FGREP. Обе они соответствуют опциям -E и -F соответственно.
Опции --help и --version (-V) общеизвестны, и я не буду на них останавливаться.
Команда grep и символы кириллицы.
Читая эту статью, вы не можете не заметить, что большинство составлено на русском языке. Я еще не встречал консольных команд, столь хорошо "владеющих русским".Теперь, когда я разобрался с этой командой, то уже не понимаю, как мог обходиться без нее при написании статей (по-русски, разумеется). Лишь некоторые опции "дают прокол" при обработке символов кириллицы.
Резюме команды grep
Команда grep задействует многофункциональную и простую в употреблении, что однажды, познакомившись с ней, невозможно представить себе работу без нее. Особенно полезна эта команда в качестве фильтра в составе программных каналов.
Ссылки
открытый клуб.RU
.
HowTo: команда использования grep в Linux
grep - утилита строки, которая находит на вводе строки,
отвечающие заданному регулярному выражению, и выводит их, если вывод не
отменён специальным ключом.
Синтаксис
Синтаксис может быть следующим:
grep 'word' имя файла grep 'слово' файл1 файл2 файл3 grep 'строка1 строка2' имя файла кот другой файл | grep 'что-то' команда | grep 'что-то' команда option1 | grep 'данные' grep --color 'data' имя_файла
Поиск по файлу
Чтобы выполнить поиск пользователя boo в файле / etc / passwd запустите:
Вывод будет примерно таким:
boo: x: 1000: 1000: boo ,,,: / home / boo: / bin / ksh
Так же вы можете регистрировать выполнитьронезависимый поиск строки boo
(например, bOo, Boo, BOO и т.п.):
$ grep -i "бу" / etc / passwd
Можно искать во всех файлах в каталоге:
$ grep -r "192.168.1.5" / etc /
или
$ grep -R "192.168.1.5" / etc /
Пример ла, в котором встречается искомая строка (например,
/ etc / ppp / options). Такое поведение можно отключить, т.е. grep не будет
вставлять в результаты поиска файлов, добавив ключ -h:
$ grep -h -R "192.168.1.5" / etc /
или
$ grep -hR "192.168.1.5 "/ etc /
Пример вывода:
# ms-wins 192.168.1.50 # ms-wins 192.168.1.51 адреса1 = 192.168.1.5; 24; 192.168.1.2;
Использование grep для поиска только слов
Если вы ищете boo, то grep найдет и такое сочетание fooboo, boo123,
123boofoo и т.п. Для того чтоб grep нашел именно слово boo можно указать
ключ -w:
Поиск двух разных слов
$ egrep -w 'word1 | word2' / путь / к / файлу
Подсчет количества
grep может посчитать количество в поисках слова в файле:
$ grep -c 'слово' / путь / к / файлу
Опция -n позволит вывести пронумерованные строки из файла номером
строки:
$ grep -n 'корень' / etc / passwd
Пример вывода:
1: корень: x: 0: 0: корень: / корень: / bin / bash 1042: rootdoor: x: 0: 0: rootdoor: / home / rootdoor: / bin / csh 3319: initrootapp: x: 0: 0: initrootapp: / home / initroot: / bin / ksh
Инвертированный вывод
Вы можете использовать параметр -v для инвертирования вывода, т.е.
вывести все строки кроме тех, в которых встречается искомое слово:
$ grep -v bar / путь / к / файлу
Unix / Linux конвеер и grep
grep можно комбинировать с конвеером
(труба).
Этот пример выведет имена жестких дисков:
# dmesg | egrep '(s | h) d [a-z]'
Показать модель CPU:
# cat / proc / cpuinfo | grep -i 'Модель'
Эта же команда может быть выполнена по другому без pipe:
# grep -i 'Модель' / proc / cpuinfo
Пример вывода:
модель: 30 название модели: Intel (R) Core (TM) i7 CPU Q 820 @ 1.73 ГГц модель: 30 название модели: Intel (R) Core (TM) i7 CPU Q 820 @ 1,73 ГГц
Вывести тол
.