Широката употреба на командата grep в Linux

Grep e много популярна Linux команда. Тя има широка употреба при работа с файлове и директории, като се използва за търсене на последователност от символи. Подобни операции се извършват постоянно, както от стандартни потребители, така и от разработчици.

Ако е открито съвпадение с подадените символи, за резултат се извеждат всички редове, които съдържат търсения низ или друга информация, указана чрез опции.

Употреба на комендата grep във файлове

Да разгледаме пример с файла Hosting.txt. Той съдържа следния текст:

“1 Derhostingbg е една от водещите хостинг компании в страната. 

2 Компанията е специализирана в изграждането на хостинг услуги.

3 Ценностите на Derhostingbg са изцяло фокусирани върху нуждите на клиента.

4 Derhostingbg предлага на своите клиенти широк спектър от хостинг решения.

5 Всеки клиент е важен.”

Ако искаме да намерим в споменатия файл конкретна последователност от символи, например “Derhostingbg”, е необходимо да употребим grep с най-базовия синтаксис: име на команда, низ от символи, име на файл.

grep Derhostingbg Hosting.txt
grep “Derhostingbg” Hosting.txt

Върнатият резултат ще представлява всички редове, които съдържат “Derhostingbg”. В нашия случай резултатът ще е само един (ред 1), поради чувствителността на командата към главни и малки букви. 

*Обикновено резултатите се визуализират с оцветяване на намерения съвпадащ низ. Ако системата, с която работите, не го оцветява в различен цвят, то използвайте --color

Синтаксис:

grep --color "Derhostingbg” Hosting.txt

В случай, че желаем тази чувствителност да не се взема под внимание, е необходимо да използваме опция -i. Командният ред ще изглежда по следния начин:

grep -i Derhostingbg Hosting.txt

Резултатът, който ще бъде върнат, включва редове 1, 3 и 4.  Символните низове Derhostingbg, Derhostingbg и derhostingbg ще бъдат разглеждани като еднакви.

Това не е единствената опция, която ще улесни работата ни с командата. Понякога са нужни по-специфични търсения във файл и благодарение на богатата база от опции на grep, е възможно търсене по определени условия. 

Други полезни опции на командата grep

А ето и още полезни опции за командата grep в Linux:

Извеждане на брой редове, в които фигурира търсения низ

Тази операция се извършва с помощта на опция -c.

grep -c "Derhostingbg" Hosting.txt

Върнат резултат:

1

Извеждане на редовете, които започват или свършват с търсения низ

Друга полезна и по-конкретна опция е извеждане на всички редове, които започват с търсен низ.  Символът “^” обозначава започването на ред. Със следния шаблон могат да се изведат споменатите редове:

grep "^1" Hosting.txt

Върнат резултат:

1. Derhostingbg е една от водещите хостинг компании в страната. 

Аналогично на предходната опция, ни е необходим символ, с който да обозначим, че търсим редове, завършващи с търсения низ. Използваме символ “$” и командата ще изглежда по следния начин:

grep "услуги.$" Hosting.txt   

*да не се пропуска, че изреченията вероятно завършват с точка, която не трябва да бъде изпусната.

Намиране на цяла дума

Както вече споменахме, grep търси последователност от символи. Те могат да фигурират в друга, по-голяма символна група. Има начин да филтрираме и открием самостоятелните думи, благодарение на опцията -w.

Ако отново във файл Hosting.txt се търси думата “клиент”, то при базов синтаксис:

grep клиент Hosting.txt

Върнати резултати ще са редове 3, 4 и 5, защото съдържат думите: клиента, клиенти клиент.

Когато искаме със сигурност да намерим думата “клиент”, следва да подадем командата така:

grep -w клиент Hosting.txt

В този случай  резултат ще е ред 5: “5 Всеки клиент е важен ”, защото търсеният низ точно отговаря на думата.

Извеждане само на съвпадащия низ

Тази операция е достъпна, благодарение на опция -o. Тя ще върне списък с всички символни поредици, които отговарят на зададеното търсене.

grep -o "Derhostingbg" Hosting.txt

Връщане  на съвпадение и номер на ред

Когато работите с голям файл, със сигурност ще намерите приложение и на опцията -n. Командата grep, в комбинация с тази опция, връща съдържанието на реда, в който има съвпадение, но и номер на конкретния ред. Например:

grep -n "Derhostingbg" Hosting.txt

Върнат резултат

1: 1 Derhostingbg е една от водещите хостинг компании в страната. 

Обратна операция на търсене

Искате да намерите всички редове, в които не фигурира даден низ? Командата grep ще ви помогне и в този случай, заедно с опцията -v.

grep -v "Derhostingbg" Hosting.txt

Резултат:

2 Компанията е специализирана в изграждането на хостинг услуги.

3 Ценностите на derhostingbg са изцяло фокусирани върху нуждите на клиента.

4 Derhostingbg предлага на своите клиенти широк спектър от облачни решения.

5 Всеки клиент е важен.

Извеждане на специфични редове от файлове, с две основни опции

Grep Ви предоставя възможност да търсите ред със специфичен низ, а чрез добавяне на -A  ще бъдат изведени и следващите n редове.

grep -A1 "Ценностите"  Hosting.txt

Резултат:

3 Ценностите на Derhostingbg са изцяло фокусирани върху нуждите на клиента.

4 Derhostingbg предлага на своите клиенти широк спектър от облачни решения.

Опцията -B[n] е аналогична, но връща n на брой редове преди този със съвпадение:

grep -B1 "Ценностите"  Hosting.txt

Резултат:

2 Компанията е специализирана в изграждането на хостинг услуги.

3 Ценностите на Derhostingbg са изцяло фокусирани върху нуждите на клиента.

Работа на grep в директории

А ето и практически примери как да използвате Linux командата grep в директории:

Извеждане на имената на всички файлове от директория, в които фигурира търсения низ

Командата ще се изпълни в този си вид, в комбинация с опция -l, като проверката ще се изпълни в текущата директория.

grep -l "Derhostingbg"  *

Символът * основно означава “Всичко/ Всички” в Linux. Вместо него, в този случай, могат да бъдат изброени файлове, които да се обходят.

grep -l "Derhostingbg"  file1.txt file2.txt  Hosting.txt

Рекурсивно търсене в директория

С grep командата може да се обхожда текущата директория и рекурсивно нейните поддиректории, търсейки конкретен низ.

grep -R "Derhostingbg"  *

С командния ред ще бъде потърсен текстът “Derhostingbg”  във всички файлове, които се съдържат в текущата директория и нейните дъщерни такива.

Като върнат резултат се визуализират редове, които съдържат:

име/път-на-файл:ред със съвпадение

Hosting.txt:1 Derhostingbg е една от водещите хостинг компании в страната. 

Полезни примери и употреба на последователност от операции

Употребата на grep може да е много полезна и в комбинация с редица команди, както и със самата себе си. Подготвили сме Ви полезни примери, в които да разкрием част от потенциала ѝ.

Последователност от операции

Ако се нуждаете от по-специфично търсене, може да използвате последователност от команди на един команден ред. За разделител служи символът | (вертикална черта).

Някои от командите могат да се изпълнят и една след друга, но ще бъде изведена  много ненужна информация. Употребата на последователност от команди на един ред може да се разглежда като скрипт и би спестила време.

Пример:

команда 1 |  команда 2 | команда n

Всяка една команда се изпълнява и предава резултата си на следващата. Извежда се крайната стойност, след всички операции.

Намиране на конкретен активен процес

Пример за последователност от команди е употребата на ps aux, заедно с grep.

При изпълнение на ps aux се извеждат всички процеси и ресурсите, които използват. Ако се нуждаем от по-специфично търсене, а именно процесът, отговарящ за уеб сървъра, е необходимо да направим комбинация с grep.

Синтаксис:

ps aux | grep httpd

Извеждане на последните 10 резултата от файл по специфично търсене

Да разгледаме употребата на grep, в по-комплициран пример. Необходимо е да потърсим във файл error_log последните 10 резултата, които съдържат низовете ModSecurity и user. Това би изглеждало като сложна комбинация от команди, но разгледани индивидуално, те съвсем не са плашещи.

Синтаксис:

cat /etc/httpd/logs/error_log | grep ModSecurity | grep user | tail -10

С cat се достъпва файлът error_log. Следва grep команда за откриване на всички редове, в които се съдържа “ModSecurity“. Откритите съвпадения се подават на още една команда grep филтрация, по низ “user”. Команда tail служи, за да върне само последните 10 реда от всички съвпадения.

Grep в комбинация с find

Има случаи, в които за последователност от операции не се използва символа |. Например команда find  изисква въвеждането на -exec, за да се продължи с изпълнение на допълнителна команда. В следващия пример са комбинирани find и grep.

find . -type f -name "*.php" -exec grep -li "FilesMan" {} \;

Тази група от команди, първо,  намира всички файлове с разширение .php. След това извежда списък с всички редове, които съдържат низ “FilesMan”.

 

  • Широката употреба на командата grep в Linux
  • 0 Потребителите са намерили това полезно
Беше ли този отговор полезен?

Свързани статии

33 основни Linux команди, които бързо можете да научите

Linux е операционна система с отворен код, базирана на Linux kernel. Тя е от семейството на Unix,...

Как да използвате командите zip и unzip в Linux?

Когато изтегляте файлове от интернет, много често те са под формата на архив. Целта на този архив...

Как да използвате командите chmod и chown в Linux?

В тази статия ще разгледаме как могат да се променят правата на потребителите и собствеността...

Как да използвате Linux командите Find и Locate за търсене и навигация във файловата система

При работата с Linux операционната система, често се налага да извършваме операции за търсене и...

Как да проверите използваното дисково пространство в Linux с командите du и df

Linux предоставя набор от инструменти, които Ви позволяват под команден ред, да проверявате...