русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

ЗАДАНИЯ


Дата добавления: 2015-07-09; просмотров: 561; Нарушение авторских прав


· Составьте регулярное выражение для пустой строки.

· Как выявить в текстовом файле все строки, содержащие символ с восьме- ричным кодом 007?

· Какой класс можно использовать для этого?

 

 

Поиск текста с помощью grep

Команда grep производит поиск в указанных файлах строк по регулярному выражению. Команда выводит в случае удачного поиска имя файла и строку, удовлетворяющую заданному регулярному выражению. Если входные файлы не заданы, то команда производит ввод из стандартного потока ввода. При этом используются три разновидности команды grep (далее идет речь о GNU-версии команды grep):

r grep — интерпретирует регулярные выражения с обычным (basic) синтак- сисом;

r grep -F или fgrep — не интерпретирует регулярные выражения, воспри- нимая их как обычные текстовые строки;

r grep -E или egrep — позволяет работать с расширенным синтаксисом регулярных выражений.


 

Команды grep, egrep и fgrep, разработанные в проекте GNU, обычно реали- зованы в виде жестких связей (или символических ссылок). То есть все эти три команды являются одним файлом. В других разновидностях UNIX- подобных систем это не так. Приведенные далее примеры не всегда будут работать так же в других операционных системах, например, в Sun Solaris или FreeBSD.

Для поиска всех пользователей системы, использующих оболочку bash, до- статочно выполнить команду grep с обычным регулярным выражением (пример 9.1).

 

Пример 9.1. Поиск с помощью обычного регулярного выражения

 

$ grep 'bash$' /etc/passwd

root:x:0:0:System Administrator:/root:/bin/bash tania:x:502:502::/home/tania:/bin/bash figus:x:503:503::/home/figus:/bin/bash user1:x:504:100::/home/user1:/bin/bash

 

Регулярное выражение взято в апострофы для предотвращения интерпрета- ции символа доллара оболочкой (пример 9.1). Доллар здесь обозначает конец строки.



Теперь, например, требуется выделить из всех файлов в каталоге /etc/sysconfig/ все строки, содержащие IP-адреса в стандарте IPv4. Такую задачу удобнее всего решать с помощью расширенного синтаксиса регулярных выражений, т. е. используя команду egrep (пример 9.2).

 

Пример 9.2. Поиск с помощью расширенных регулярных выражений

 

$ egrep '[0-9]{1,3}(\.[0-9]{1,3}){3}' /etc/sysconfig/*

 

В этой команде обеспечивается поиск последовательности из одной, двух или трех любых десятичных цифр, которая должна быть троекратно про- должена такой же последовательностью. Причем каждая последователь- ность отделена от предыдущей последовательности точкой. Командой fgrep удобно пользоваться для поиска строк, содержащих символы, имею- щие особое значение, как регулярные выражения. Так, например, можно получить список всех процессов, не связанных с какими-либо терминалами (пример 9.3).


 

Пример 9.3. Использование fgrep

 

$ ps -e | fgrep '?'

 

Команда fgrep воспринимает знак вопроса просто как обычный символ, ко- торый должен быть найден в строке.

Опция -i позволяет производить поиск без учета регистра. Приведенный да- лее пример 9.4 демонстрирует, как с помощью поиска с игнорированием ре- гистра найти все процессы в системе, где в командной строке есть подстрока X или x.

 

Пример 9.4. Поиск с игнорированием регистра

 

$ ps -e | grep -i x

1546 ? 00:00:01 xfs

1599 ? 00:00:19 X

1752 ? 00:00:00 xvt

 

Если требуется подсчитать число вхождений регулярного выражения, то для этого используется опция -c (пример 9.5).

 

Пример 9.5. Подсчет вхождений регулярного выражения

 

$ egrep -c '^.{1,3}:' /etc/passwd 7

 

В приведенном примере 9.5 подсчитано, сколько имеется пользователей, длины имен которых не превышают три символа.

Опция -v команды grep инвертирует алгоритм поиска: команда начинает ис- кать строки, не удовлетворяющие регулярному выражению. Так, предполо- жим, что требуется найти список всех групп из файла /etc/group, в которые не входит пользователь user1 (пример 9.6).

 

Пример 9.6. Инверсия условия поиска

 

$ grep -v user1 /etc/group

 

Если в регулярном выражении не указаны какие-либо ограничители, связан- ные с началом или концом слова, то команда grep производит поиск под- строки, а не слова. В команде egrep начало и конец слова можно обозначить


 

регулярными выражениями, соответственно, \< и \>. Например, в файле

/etc/sysctl.conf для поиска всех строк, в которых встречается слово Enable, но не Enables, можно использовать команду, приведенную в примере 9.7.

 

Пример 9.7. Поиск слова

 

$ egrep '\<Enable\>' /etc/sysctl.conf

# Enable the magic-sysrq key

# Enable tcp_syncookies

 

Однако в таком случае гораздо удобнее воспользоваться опцией -w команды

grep, которая устанавливает режим поиска по целому слову (пример 9.8).

 

Пример 9.8. Поиск слова с помощью опции -w

 

$ grep -w Enable /etc/sysctl.conf

# Enable the magic-sysrq key

# Enable tcp_syncookies

 

При необходимости можно также установить режим поиска по целой строке, для чего предназначена опция -x. Приведенная в примере 9.9 команда позво- лит отыскать в каталоге /etc все файлы, которые содержат строки, состоящие из одного символа.

 

Пример 9.9. Поиск целой строки с помощью опции -x

 

$ grep -x '.' /etc/*

 

Использование опции -n позволяет установить режим вывода номеров строк, в которых найдены искомые строки. Так, например, требуется получить строки файла /etc/hosts, содержащие подстроки local, и номера этих строк (пример 9.10).

 

Пример 9.10. Отображение номеров строк

 

$ grep -n local /etc/hosts

1:127.0.0.1 localhost.localdomain localhost

 

Здесь в первом поле вывода перед двоеточием указан номер строки, в кото- рой найдена искомая подстрока (см. пример 9.10).


 

Опция -r заставляет команду grep работать рекурсивно, обрабатывая файлы в подкаталогах. Например, в каталоге /usr/share/doc/HOWTO/ требуется най- ти все файлы, содержащие строку trainer (пример 9.11).

 

Пример 9.11. Рекурсивный поиск

 

$ grep -r trainer /usr/share/doc/HOWTO/

 



<== предыдущая лекция | следующая лекция ==>
Классификация регулярных выражений | Использование обратных ссылок


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.185 сек.