Команда grep

Thank you for reading this post, don't forget to subscribe!

Утили­та grep в Linux пред­на­зна­че­на для филь­тра­ции выход­ных дан­ных или поис­ка опре­де­лен­но­го сло­ва в фай­ле. Этот пост будет касать­ся основ­ных пара­мет­ров, доступ­ных ути­ли­ты grep в Linux.

Крат­кая фор­ма коман­ды grep (Global Regular Expression and Print)На базо­вом уровне коман­да grep в Linux исполь­зу­ют­ся для поис­ка или филь­тра­ции про­стых тек­сто­вых дан­ных, исполь­зуя неко­то­рую фор­му регу­ляр­но­го выражения.

Команда grep в Linux и ее опции

Перед изу­че­ни­ем коман­ды grep, посмот­рим на основ­ной син­так­сис ее.

Основной синтаксис для команды grep

 

Варианты с командой grep

1. Простой поиск в файле

Давай­те рас­смот­рим при­мер в фай­ле “/etc/passwd” для поис­ка стро­ки в фай­ле. Что­бы най­ти сло­во “system” при помо­щи коман­ды grep, исполь­зуй­те команду:

 

При­мер вывода:

 

2. Подсчет появления слов.

В при­ве­ден­ном выше при­ме­ре мы име­ем в систе­ме поиск слов в фай­ле “/etc/passwd”. Если мы хотим знать коли­че­ство или чис­ло появ­ле­ний сло­ва в фай­ле, то исполь­зуй­те опцию ниже:

 

Выше ука­зан­но, что сло­во появи­лось два раза в фай­ле “/etc/passwd”.

3. Игнорировать регистрозависимые слова

Коман­да grep чув­стви­тель­на к реги­стру, это озна­ча­ет, что он будет искать толь­ко дан­ное сло­во в фай­ле. Что­бы про­ве­рить эту функ­цию, создай­те один файл с име­нем «test.txt» и с содер­жа­ни­ем, как пока­за­но ниже:

 

Теперь, если вы попы­та­е­тесь най­ти стро­ку «andreyex», то коман­да не будет пере­чис­лять все сло­ва «andreyex» с раз­ны­ми вари­ан­та­ми, как пока­за­но ниже:

 

Этот резуль­тат под­твер­жда­ет, что толь­ко один вари­ант будет пока­зан, игно­ри­руя осталь­ную часть сло­ва «andreyex» с раз­ны­ми вари­ан­та­ми. И если вы хоти­те игно­ри­ро­вать этот слу­чай, вам нуж­но исполь­зо­вать пара­метр «-i» с grep, как пока­за­но ниже:

4. Две разные строки внутри файла с командой grep

Теперь, если вы хоти­те най­ти два сло­ва или стро­ки с помо­щью коман­ды grep, то вы долж­ны задать рас­ши­рен­ные. В сле­ду­ю­щей коман­де мы нахо­дим две стро­ки «system» и «nobody» в фай­ле /etc/passwd.

 

5. Рекурсивный поиск

Допу­стим, вы хоти­те най­ти сло­во или стро­ку рекур­сив­но в любом месте ката­ло­га, тогда исполь­зуй­те опцию -r. Напри­мер, если вы хоти­те най­ти сло­во «check_oracle» рекур­сив­но в ката­ло­ге /etc, то исполь­зуй­те сле­ду­ю­щую команду:

 

В выво­де выше мы можем иметь воз­мож­ность видеть имя фай­ла, в кото­ром мы нашли стро­ку, и если вы хоти­те убрать имя фай­ла в конеч­ном резуль­та­те, то исполь­зуй­те опцию «-h», как пока­за­но ниже:

 

6. Вывод команды grep.

Если вы хоти­те най­ти стро­ку или сло­во в любом выво­де коман­ды, то вы долж­ны исполь­зо­вать опе­ра­тор «|», а затем <стро­ка> в grep. Допу­стим, вы хоти­те най­ти в памя­ти, свя­зан­ные сло­ва выво­да коман­ды dmesg, то исполь­зуй­те сле­ду­ю­щую команду.

 

7. Инвертирование с помощью команды grep в Linux

Допу­стим, если вы хоти­те отоб­ра­зить все сло­ва в фай­ле, кото­рый не содер­жит какое-либо кон­крет­ное сло­во, то исполь­зуй­те опцию «-v». Это поз­во­ля­ет создать один файл с содер­жи­мым, как пока­за­но ниже:

 

Если мы не хотим печа­тать стро­ки, содер­жа­щие сло­во Linux, то исполь­зуй­те сле­ду­ю­щую команду.

 

8. Точное совпадение слова

В соот­вет­ствии с при­ме­ром, при­ве­ден­ным в пунк­те 7, если мы ищем Andreyex, то он будет печа­тать все вхож­де­ние Andreyex как «Andreyex12», «Andreyex454», «Andreyex34343», а так­же «Andreyex», как пока­за­но ниже:

 

тогда, если мы хотим най­ти точ­ное сло­во «Andreyex» вме­сто это­го, что­бы пере­чис­лить весь вывод выше, то исполь­зуй­те опцию «-w», как пока­за­но ниже: