<Предыдущая | Содержание: | Следующая>
GREP
Основная программа, которую мы будем использовать для работы с регулярными выражениями, - это наш старый приятель, GREP. Название «grep» на самом деле происходит от фразы «глобальное регулярное выражение print», поэтому мы можем видеть, что GREP имеет какое-то отношение к регулярным выражениям. По сути, GREP ищет в текстовых файлах текст вхождения, соответствующий указанному регулярному выражению, и выводит любую строку, содержащую совпадение, в стандартный вывод.
До сих пор мы использовали GREP с фиксированными строками, например:
[я @ linuxbox ~] $ ls / usr / bin | grep zip
[я @ linuxbox ~] $ ls / usr / bin | grep zip
Это перечислит все файлы в / USR / бен каталог, в именах которого есть подстрока «zip».
Ассоциация GREP программа принимает параметры и аргументы следующим образом:
грэп [кредита] регулярное выражение [файл ...]
в котором регулярное выражение является регулярным выражением.
Вот список наиболее часто используемых GREP опции:
Таблица 19-1: Параметры grep
Вариант Описание
Вариант Описание
-i Игнорировать регистр. Не различайте символы верхнего и нижнего регистра. Также может быть указано --игнорировать регистр.
-v Инвертировать совпадение. Как обычно, GREP печатает строки, содержащие совпадения.
Эта опция вызывает GREP для печати каждой строки, не содержащей совпадений. Также может быть указано --invert-match.
-c Выведите количество совпадений (или несовпадений, если -v также указывается опция) вместо самих строк. Также может быть указано --считать.
-l Выведите имя каждого файла, содержащего совпадение, вместо самих строк. Также может быть указано - файлы с совпадениями.
-L Аналогично опции -l, но выводит только имена файлов, не содержащих совпадений. Также можно указать --files-without- match.
-n Префикс каждой совпадающей строки с номером строки в файле. Также можно указать --line-number.
-h Для многофайлового поиска подавите вывод имен файлов. Также может быть указано --без имени файла.
Чтобы более полно изучить GREP, давайте создадим несколько текстовых файлов для поиска:
GREP
[я @ linuxbox ~] $ ls / bin> dirlist-bin.txt [я @ linuxbox ~] $ ls / usr / bin> dirlist-usr-bin.txt [я @ linuxbox ~] $ ls / sbin> dirlist-sbin.txt [я @ linuxbox ~] $ ls / usr / sbin> dirlist-usr-sbin.txt [я @ linuxbox ~] $ ls dirlist * .txt
список каталогов-bin.txt список каталогов-sbin.txt список каталогов-usr-sbin.txt список каталогов-usr-bin.txt
[я @ linuxbox ~] $ ls / bin> dirlist-bin.txt [я @ linuxbox ~] $ ls / usr / bin> dirlist-usr-bin.txt [я @ linuxbox ~] $ ls / sbin> dirlist-sbin.txt [я @ linuxbox ~] $ ls / usr / sbin> dirlist-usr-sbin.txt [я @ linuxbox ~] $ ls dirlist * .txt
список каталогов-bin.txt список каталогов-sbin.txt список каталогов-usr-sbin.txt список каталогов-usr-bin.txt
Мы можем выполнить простой поиск в нашем списке файлов следующим образом:
[я @ linuxbox ~] $ grep bzip dirlist * .txt
dirlist-bin.txt: bzip2 dirlist-bin.txt: bzip2recover
[я @ linuxbox ~] $ grep bzip dirlist * .txt
dirlist-bin.txt: bzip2 dirlist-bin.txt: bzip2recover
В этом примере GREP ищет во всех перечисленных файлах строку bzip и находит два совпадения, оба в файле список каталогов-bin.txt. Если бы нас интересовал только список файлов, содержащих совпадения, а не сами совпадения, мы могли бы указать -l опции:
[я @ linuxbox ~] $ grep -l bzip dirlist * .txt
список каталогов-bin.txt
[я @ linuxbox ~] $ grep -l bzip dirlist * .txt
список каталогов-bin.txt
И наоборот, если бы мы хотели увидеть только список файлов, которые не содержат совпадений, мы могли бы сделать это:
[я @ linuxbox ~] $ grep -L bzip dirlist * .txt
список каталогов-sbin.txt список каталогов-usr-bin.txt список каталогов-usr-sbin.txt
[я @ linuxbox ~] $ grep -L bzip dirlist * .txt
список каталогов-sbin.txt список каталогов-usr-bin.txt список каталогов-usr-sbin.txt