Linux: регулярные выражения в Grep
Вряд ли найдется человек который знаком с Linux и не знаком с утилитой grep. Grep – является утилитой которая сроднилась с ОС Linux, включается в любой дистрибутив по умолчанию и позволяет находить информацию в файлах.
[ad#ad-2]
Регулярные выражения используемые в утилите Grep позволяют описать любую искомую строку. Примеры регулярных выражений:
^w1 w1|w2 [^ ]
В данном примере мы ищем любую строку содержащую последовательность символов “‘vivek’” в файле /etc/passswd
#grep vivek /etc/passwd vivek:x:1000:1000:Vivek Gite,,,:/home/vivek:/bin/bash vivekgite:x:1001:1001::/home/vivekgite:/bin/sh gitevivek:x:1002:1002::/home/gitevivek:/bin/sh
Пример поиска без учета регистра слова (т.е. без разницы с заглавной или прописной буквы начинается искомое слово)
grep -i -w vivek /etc/passwd
Пример поиска слова vivek или raj без учета регистра в файле /etc/passswd
grep -E -i -w 'vivek|raj' /etc/passwd
Использование символов ^ и $ в регулярных выражениях утилиты Grep
Символы ^ и $ в регулярных выражениях указывают на местоположение искомого слова в строке. Начало строки указывает ^ а конец строки $.
В следующем примере мы ищем строки которые начинаются со слова vivek
#grep ^vivek /etc/passwd vivek:x:1000:1000:Vivek Gite,,,:/home/vivek:/bin/bash vivekgite:x:1001:1001::/home/vivekgite:/bin/sh
Мы можем так же заставить grep искать строки которые начитаются только с vivek (и не показывать vivek1 vivek2 vivekgite)
grep -w ^vivek /etc/passwd
Поиск строки заканчивающейся на foo:
grep 'foo$' filename
Поиск строки содержащей только foo
grep '^foo$' filename
А можем поискать пустые строки в файле
grep '^$' filename
Поиск строки в которое входит выражение начинающееся с большой или с маленькой буквы
grep '^[vV]ivek' filename
Поиск той же строки только слово оканчивается на цифру
grep -w '[vV]ivek[0-9]' filename
Или на две цифры
grep 'foo[0-9][0-9]' filename
Так же при использовании Grep можно использовать такие выражения
[:alnum:] - посик буквенно-цифровых символов. [:alpha:] - буквенных символов [:blank:] - space и tab. [:digit:] - цифры: '0 1 2 3 4 5 6 7 8 9'. [:lower:] - прописные буквы: 'a b c d e f g h i j k l m n o p q r s t u v w x y z'. [:space:] - пустые символы: tab, newline, vertical tab, form feed, carriage return, and space. [:upper:] - заглавные буквы: 'A B C D E F G H I J K L M N O P Q R S T U V W X Y Z'.
Поиск всех строк из двух символов
grep '^..$' filename
Поиск всех строк начинающихся с точки и цифры
grep '^\.[0-9]' filename
Экранирование точек
Если мы зададим поиск вот так
grep '192.168.1.254' /etc/hosts
То в результате не получим того что нам хотелось
Для того что бы искать ip address надо экранировать входящие в него точки
grep '192\.168\.1\.254' /etc/hosts
В следующем примере ищем все строчки в которых есть ip address
egrep '[[:digit:]]{1,3}\.[[:digit:]]{1,3}\.[[:digit:]]{1,3}\.[[:digit:]]{1,3}' filenameЗ.Ы. возможно все что написано станет понятно не с первого раза, но к сожалению в одной статье описать все примеры просто невозможно. Если интересно – спрашивайте в комментах – ответим.
Статьи по теме:
Комментарии
One Comment on Linux: регулярные выражения в Grep
-
Va-DoS (1) Сб, 20th Фев 2010 4:16 дп
Отличные новости!!! Ура!
Оставьте свое мнение о статье...


