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

З.Ы. возможно все что написано станет понятно не с первого раза, но к сожалению в одной статье описать все примеры просто невозможно. Если интересно - спрашивайте в комментах - ответим.

Теги:
 
  • Смог!

    ну че, 6 лет прошло ? Удалось разобраться-то ?