В данном сценарии рассматривается практическое использование регулярных выражений для поиска по текстовым файлам.
Начальные условия: Командная строка. Каталог test/log с найденными системными журналами.
1. Среди найденных системных журналов посмотреть файл журнала загрузки графичской системы XFree86.0.log с помощью команды less test/log/XFree86.0.log:
user@desktop ~ $ less test/log/XFree86.0.log
Выйти из просмоторщика можно нажатием клавиши q.
2. Найти все предупреждения в журнале: строка, начинающаяся с «(WW)». Для этого ввести команду grep "^(WW)" test/log/XFree86.0.log:
3. user@desktop ~ $ grep "^(WW)" test/log/XFree86.0.log4. (WW) The directory "/usr/share/fonts/freefonts/" does not exist.5. (WW) The directory "/usr/share/fonts/unifont/" does not exist.6. (WW) The directory "/usr/share/fonts/artwiz/" does not exist....
7. Получить все строки, содержащие следующий шаблон: последовательность из 1 или более цифры или буквы, затем символ собаки, затем еще одна последовательность 1 или более цифры или буквы или точки, затем символ точки, затем от двух до четырёх букв (имя домена первого уровня). Также служебный вывод ошибок удаляется (перенаправляется в нулевое устройство). Для этого ввести команду grep "[a-zA-z0-9]\+@[a-zA-z0-9\.]\+\.[a-z]\{2,4\}" /etc/* 2>/dev/null:
8. user@desktop ~ $ grep "[a-zA-z0-9]\+@[a-zA-z0-9\.]\+\.[a-z]\{2,4\}" /etc/* 2>/dev/null9. /etc/devfsd.conf:# Richard Gooch <rgooch@atnf.csiro.au> 3-JUL-200010. /etc/inittab:# Author: Miquel van Smoorenburg, <miquels@cistron.nl>11. /etc/inittab:# Modified by: Patrick J. Volkerding, <volkerdi@ftp.cdrom.com>...
При работе с несколькими файлами grep по умолчанию использует вывод имени файла перед найденной стокой.
12. Избавиться от имени файла в начале строки с помощью ключа -h. Ввести команду grep -h "[a-zA-z0-9]\+@[a-zA-z0-9\.]\+\.[a-z]\{2,4\}" /etc/* 2>/dev/null:
13. user@desktop ~ $ grep -h "[a-zA-z0-9]\+@[a-zA-z0-9\.]\+\.[a-z]\{2,4\}" /etc/* 2>/dev/null14. # Richard Gooch <rgooch@atnf.csiro.au> 3-JUL-200015. # Author: Miquel van Smoorenburg, <miquels@cistron.nl>16. # Modified by: Patrick J. Volkerding, <volkerdi@ftp.cdrom.com> ...
17. Для вывода только найденной подстроки используется ключ -o. Ввести команду grep -ho "[a-zA-Z0-9]\+@[a-zA-Z0-9\.]\+\.[a-z]\{2,4\}" /etc/* 2>/dev/null:
28. Для каждого из найденных файлов произвести поиск подстроки «nameserver». Для этого ввести команду find /etc -type f -exec grep "nameserver" {} \; 2>/dev/null:
29. user@desktop ~ $ find /etc -type f -exec grep "nameserver" {} \; 2>/dev/null30. # merge the new nameservers with the other options from the old ...31. grep --invert-match '^nameserver[[:space:]]' $REALRESOLVCONF32. nameserver 10.22.10.20...
33. Для большего удобства добавить вывод имени файла (ключ -H) и номера строки (ключ -n), на которой было найдено совпадение, с помощью команды find /etc -type f -exec grep -Hn "nameserver" {} \; 2>/dev/null:
34. user@desktop ~ $ find /etc -type f -exec grep -Hn "nameserver" {} \; 2>/dev/null35. /etc/ppp/ip-up:24: # merge the new nameservers with the other optio...36. /etc/ppp/ip-up:26: grep --invert-match '^nameserver[[:space...37. /etc/ppp/resolv.conf:1:nameserver 10.22.10.20...
Таким образом, команда grep может эффективно использоваться вместе с командой find для нахождения информации в файлах.