Образовательный проект «SnakeProject» Михаила Козлова

Навигация

⇒ FreeBSD and Nix ⇐

CISCO

Voice(Asterisk\Cisco)

Microsoft

Powershell

Python

SQL\T-SQL

Общая

WEB Разработка

ORACLE SQL \ JAVA

Мото

Стрельба, пневматика, оружие

Саморазвитие и психология


Linux поиск по содержимому файла grep и egrep


 

Linux поиск по содержимому файла grep и egrep


В продолжении цикла заметок по Linux расскажу про поиск

В данной статье пойдет речь о поиске по содержимому файла


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


Синтаксис POSIX Basic Regular Expression (BRE) 
Дает расширения для программ как grep, sed и awk

Синтаксис
Большинство символов обрабатываются как литералы
Например символ "a" соответствует литере "a"

Исключения, перечисленные ниже, называются метасимволами:

. - Соответствует любому отдельному символу
Примеры: 
a.c соответствует "abc" и т.д.
Но [a.c] соответствует только "a", "." или "c"

[ ] - Соответствует одному символу в квадратных скобках 
Примеры: 
[abc] соответствует "a", "b" или "c"
[a-z] соответствует диапазону любой строчной букве от "a" до "z"
[abcx-z] соответствует "a", "b", "c", "x", "y" или "z"

^ - Соответствует начальной позиции в строке
(Если ^ - первый символ регулярного выражения)

[^ ] - Соответствует одному символу, который не содержится в скобках
Примеры: 
[^abc] соответствует любому символу, кроме "a", "b" или "c"
[^a-z] соответствует любому символу, который не буква от "a" до "z"

$ - Соответствует конечной позиции в строке
(Если это последний символ регулярного выражения)

* - Соответствует предыдущему элементу ноль или более раз
Примеры: 
ab*c соответствует "ac", "abc", "abbbc", и т.д.
[xyz]* соответствует "", "x", "y", "z", "zx", "zyx", "xyzzy", и т.д.


Теперь, про разницу синтаксиса BRE с ERE (расширенные регулярные выражения)

BRE: \{m\}
ERE: {m}
Соответствует предыдущему элементу ровно m раз
Примеры: 
a\{3\} 
a{3} 
соответствует только "aaa"

BRE: \{m,\}
ERE: {m,}
Соответствует предыдущему элементу не менее m раз.
Примеры: 
a\{3,\} 
a{3,} 
соответствует "aaa", "aaaa", "aaaaa", "aaaaaa", "aaaaaaa" и тд.

BRE: \{m,n\}
ERE: {m,n}
Соответствует предыдущему элементу не менее m и не более n раз
Примеры: 
a\{3,5\} 
a{3,5} 
соответствует только "aaa", "aaaa" и "aaaaa".

BRE: \( \)
ERE: ( )
Определяет подвыражение, которое рассматривается как единый элемент
Примеры: 
\(ab\)* 
(ab)* 
соответствует "", "ab", "abab", "ababab" и тд.

BRE: \+
ERE: +
Соответствует предыдущему элементу один или несколько раз
Примеры: 
ab\+c или ab+c соответствует "abc", "abbbc" и т. д., но не "ac"
[xyz]\+ или [xyz]+ соответствует "x", "y", "z", "zx", "zyx", "xyzzy" и тд.
\(ab\)\+ или (ab)+ соответствует "ab", "abab", "ababab" и тд.

BRE: \?
ERE:
Соответствует предыдущему элементу один или ноль раз
Примеры: 
ab\?c или ab?c соответствует либо "ac", либо "abc"
\(ab\)\? или (ab)? соответствует "" или "ab"


Еще примеры:
.at - соответствует любой трехсимвольной строке, заканчивающейся на "at"
[hc]at - соответствует "hat" и "cat"
[^b]at соответствует всем строкам, сопоставленным .at, кроме "bat"
^[hc]at соответствует "hat" и "cat", но только в начале строки
[hc]at$ соответствует "hat" и "cat", но только в конце строки или строке
\[.\] соответствует любому отдельному символу, в "[ ]"


Синтаксис POSIX Extended Regular Expression (ERE)
Символы: ( ) [ ] . * ? + | ^ $ являются специальными символами
Можно использовать grep, включив флаг -E

Конструкция в ERE: "a\.(\(|\))" совпадет со строкой "a.)" или "a.("

Примеры:
"[hc]+at" соответствует "hat", "cat", "hhat", "chat", "hcat", "ccchat" и т.д.
"[hc]?at" соответствует "hat", "cat" и "at"
"([cC]at)|([dD]og)" соответствует "cat", "Cat", "dog" и "Dog"


Теперь рассмотрим сами утилиты поиска grep и egrep


grep - Global Regular Expression Print:
Умеет искать строки, подстроки в файлах
Применяет Basic Regular Expressions (BRE) регулярных выражений
Метасимволы в BRE: ( ) { } | + ? 
Воспринимаются обычными символами
Для восприятия специальными необходимо выделение слешем - \
Умеет применять расширенные регулярные выражения (ERE)

Синтаксис grep:
grep <ОПЦИИ> ШАБЛОН <ФАЙЛ>
grep <ОПЦИИ> -E ШАБЛОН <ФАЙЛ>

Опции grep:
-G, --basic-regexp     ШАБЛОН — простое регулярное выражение (по умолчанию)
-E, --extended-regexp  ШАБЛОН — расширенное регулярное выражение

Подпробнее:
man grep

Примеры grep:

Поиск слова peasant в файле (регистрозависмый поиск):
grep peasant /etc/passwd

Поиск слова peasant в файле (регистронезависмый поиск):
grep -i "peasant" /etc/passwd

Поиск строки,начинающейся в строке с peasant:
grep "^peasant" /etc/passwd

Поиск слова easant, начинается с указанных символов:
grep "^[pP]easant" /etc/passwd

Поиск слова easant, начинается с любого символа:
grep "^.easant" /etc/passwd

Регулярное выражение:
grep "x:[0-1]...:1000" /etc/passwd

Регулярное выражение:
grep "x:[0-1]*:1000" /etc/passwd

Регулярное выражение:
grep -r "^.easant" /etc/

Поиск рекурсивно по всем файлам в указанном каталоге:
grep -h -r "^.easant" /etc/

Вывод номера строки:
grep -n "[pP]easant" /etc/passwd

Посчитать количество вхождений слова или шаблона в файле:
grep -c "[pP]easant" /etc/passwd


egrep - Extended Global Regular Expression Print:
Применяет Extended Regular Expression
Быстрее grep в поиске шаблонов регулярных выражений
Обрабатывает метасимволы как есть

-w, --word-regexp
Только строки, содержащие совпадения, с целыми словами

Примеры egrep:

Поиск по 2м вариантам вхождений целого слова:
egrep -w "[pP]easant|[rR]oot" /etc/passwd

Поиск по вхождению из списка и количества повторений символа:
egrep "[rR]o{2}" /etc/passwd

 


Комментарии пользователей

Эту новость ещё не комментировалиНаписать комментарий
Анонимам нельзя оставоять комментарии, зарегистрируйтесь!

Контакты Группа ВК Сборник материалов по Cisco, Asterisk, Windows Server, Python и Django, SQL и T-SQL, FreeBSD и LinuxКод обмена баннерами Видео к IT статьям на YoutubeВидео на другие темы Смотреть
Мои друзья: Советы, помощь, инструменты для сис.админа, статическая и динамическая маршрутизация, FreeBSD

© Snakeproject.ru создан в 2013 году.
При копировании материала с сайта - оставьте ссылку.
Весь материал на сайте носит ознакомительный характер,
за его использование другими людьми, автор ответственности не несет.

Рейтинг@Mail.ru
Рейтинг@Mail.ru Яндекс.Метрика





Поддержать автора и проект