русс | укр

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

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

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

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


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

Команды, использующие регулярные выражения


Дата добавления: 2014-11-27; просмотров: 1086; Нарушение авторских прав


grep

Часто пользователю нужно найти только упоминания чего-то конкретного в файле или среди данных, выводимых программой. Обычно эта задача сводится к поиску строк, в которых встречается определенное слово или комбинация символов. Для этого подходит стандартная утилита grep. grep может искать строку в файлах, а может работать как фильтр: получив строки со стандартного ввода, она выведет на стандартный вывод только те строки, где встретилось искомое сочетание символов.

Простой пример: найти своего пользователя в файле /etc/passwd:

[user@localhost test]$ grep user /etc/passwdrpcuser:x:29:29:RPC Service User:/var/lib/nfs:/dev/nullrpc:x:32:32:Portmapper RPC user:/:/dev/nulluser:x:500:500::/home/user:/bin/bash

Первый аргумент команды grep — та строка, которую нужно искать в файле или стандартном вводе, в данном случае это «user», а поскольку файл /etc/passwd выводит сведения по строке на каждого пользователя, таким образом можно получить информацию о пользователе «user».

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

В регулярном выражении большинство символов обозначают сами себя, как если бы мы искали обыкновенную текстовую строку, например, «user» и «::» в регулярном выражении соответствуют строкам «Note» и «::» в тексте. Однако некоторые символы обладают специальным значением, самый главный из таких символов — звездочка («*»), поставленная после элемента регулярного выражения, обозначает, что могут быть найдены тексты, где этот элемент повторен любое количество раз, в том числе и ни одного, т.е. просто отсутствует.

С помощью следующей команды можно посмотреть все локальные сетевые имена, зарегистрированные в системе:



[user@localhost ~]$ grep "^127.*" /etc/hosts127.0.0.1 localhost.localdomain localhost

Символ «.» заменяет «любой символ», а вместе с «*» означает 0 или больше любых символов. Символ «^» в начале регулярного выражения означает, что необходимы строки, начинающиеся с данного шаблона (для обозначения конца строки используют символ «$»).

Существуют и другие способы группирования символов:

· «[» и «]» задают класс символов, когда в выражении может встретиться любой из них. С помощью следующего регулярного выражения выводятся все строки, содержащие любые числа (знак «+» является аналогом «*», только задаёт 1 и большее число упоминаний предыдущего символа):

· [user@localhost ~]$ grep "[0-9]\+" /etc/hosts· 127.0.0.1 localhost.localdomain localhost192.168.1.4 cat.home cat

· «(» и «)» позволяют группировать выражения. Например, следующая команда выводит все строки, содержащие IP-адрес:

· [user@localhost ~]$ grep "\([0-9]\+\.\)\{3\}[0-9]\+" /etc/resolv.confnameserver 192.168.0.1

Запись «{3}» означает, что предыдущий символ или выражение должно повторяться в точности 3 раза.

Регулярные выражения содержат множество управляющих символов, каждый их которых наделён собственным смыслом. Для того, чтобы воспользоваться непосредственным значением символа (для поиска его в строке), необходимо поставить перед ним символ обратной косой: «\».

Команда grep содержит множество удобных параметров, например вывод номера найденной строки (-n) или вывод только подстроки, соответствующей самому регулярному выражению (-o).

Благодаря регулярным выражениям можно автоматизировать очень многие задачи, которые в противном случае потребовали бы огромной и кропотливой работы человека. Более подробные сведения о возможностях языка регулярных выражений можно получить из руководства команды grep.

sed

Регулярные выражения можно использовать не только для поиска по файлу, но и для изменения информации. Для такого поиска с заменой можно воспользоватья утилитой sed (stream editor — поточный редактор). sed имеет свой встроенный простой язык, с помощью которого можно задать правила модифицирования файла.

Все команды встроенного языка sed состоят из одной буквы. Например, поиск с заменой выполняет команда «s» (search). Синтаксис у нее следующий:

s/что_искать/на_что_заменять/

Например:

[user@localhost ~]$ ls -l / | sed 's/^d[^ ]\+/directory/'total 6directory 2 root root 40 Feb 10 17:57 bindirectory 2 root root 172 Feb 10 20:23 bootdirectory 8 root root 3200 Feb 10 17:58 devdirectory 50 root root 480 Feb 10 18:00 etcdirectory 3 root root 60 Feb 10 18:00 home...

Эта команда заменяет в информации о корневом каталоге все строки, начинающиеся с символа d и все, следующие за ним непробельные символы, на слово directory.

Кроме команды поиска, sed имеет команды удаления, копирования и замены строк. Также команды могут иметь модификаторы, например, символ «g» в конце команды поиска указывает делять замену для всех найденных по регулярному шаблону подстрок, а не только для первого.

Попробуем разобраться подробнее, как работает редактор sed. Входной текст sed считывает построчно. К считанной строке он по очереди пробует применить каждую команду сценария. Применив все возможные команды к строке, sed выводит на стандартный вывод то, что от нее осталось. Команда сценария может начинаться с т.н. контекстного адреса, определяющего свойства строк, к которым эту команду можно применять. Простой контекстный адрес — это номер строки (команда применяется к единственной — совпадающей по номеру — строке входного потока) или регулярное выражение (команда применяется ко всем строкам, в которых найдено соответствие этому РВ). Например, команда sed "1s/_/ /g" заменит в первой строке все подчеркивания на пробелы, а sed "/^a/d" удалит (delete) все строки, начинающиеся с «a».

У sed очень широкие возможности, но довольно непривычный синтаксис. Чтобы в нем разобраться, нужно обязательно прочесть руководство sed и знать регулярные выражения.

Резюме

В данном разделе рассматриваются основные команды по работе с файловой системой и текстами, а также примеры их комплексного использования.

Ключевые термины: pwd, cd, ls, mkdir, rmdir, touch, rm, cp, mv, ln, du, tar, find, mkfifo, echo, cat, less, head, tail, cut, paste, sort, uniq, iconv, wc, dd, grep, регулярное выражение, sed

 



<== предыдущая лекция | следующая лекция ==>
Команды по работе с текстом | Сценарий: Знакомство с каталогами UNIX


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


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

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

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


 


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

 
 

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

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