Има един класически компютър на мъдростта, който гласи: "Ако имате проблем и решите да го разрешите с регулярни изрази, сега имате два проблема." Това, разбира се, произтича от възприемането, че регулярните изрази са сложни смесица от магически герои и Вуду. Редовните изрази могат да ви позволят бързо и лесно да постигнете елегантна и кратка логика на програмата, но само след като сте се научили да разберете как работят и защо. Просто за всяка Linux или Mac система идва с мощен регекс инструмент повикване grep и учене grep е основна задача за всеки потребител на енергия или системен администратор. Днес ще изследваме някои от това, което можете да направите с grep и как може да е един от най-мощните инструменти в арсенала ви.

Как работи

Накратко, задачата на Grep е да търси в блок за въвеждане. Това е доста неясно, така че е най-добре да се опише с пример. Да приемем, че имате текстов файл, наречен distros.txt, който има списък с Linux дистрибуции, като този по-долу.

Дебиан - Разпространение на стабилни сървъри
Ubuntu - Desktop distro, първоначално базиран на Debian
Kubuntu - Използва KDE desktop вместо Gnome
Fedora - Продължаване на безплатната настолна система Red Hat
Gentoo - бърза, източник-базирана Linux система за професионални потребители
SuSE - Търговски Linux, собственост на Novell
Mint - разпространено от Ubuntu дистрибуция с допълнителен ограничен софтуер

Grep може да се използва за четене на текста и филтриране, за да се показват само частите, които искате. Ако искате да видите само линиите, които съдържат думата "Ubuntu", трябва да изпълните следната команда:

 grep Ubuntu distros.txt 

(Вашата версия на grep може да включва или да не включва подчертаване на цветовете, както в горния пример)

Чувствителност на делата

Може би сте забелязали, че нашето последно търсене не е върнало Kubuntu. Освен ако не е казано друго, grep ще приеме, че сте въвели израза точно както го искате, и това важи за малки и малки букви. Ако търсите "ubuntu", но текстовият ви файл съдържа "Ubuntu", търсенето ви няма да намери нищо. За да направите търсачката си без значение, използвайте превключвателя -i, както е в

 grep -i ubuntu distros.txt 

Цяла дума

При предишното търсене сте включили всички варианти с главни букви на думата "Ubuntu". Това включваше Kubuntu, защото съдържа думата, която търсите. Може да искате да включите стандартната версия, а не Kubuntu или Edubuntu и т.н. Ако случаят е такъв, можете да кажете на grep, че съвпада с цялата дума, само като премине опцията -w .

 grep -i ubuntu distros.txt 

изключване

Докато можете да използвате grep, за да показвате само съвпадащи записи, можете също да го използвате, за да покажете всичко, но не и съответстващите записи. За да разширим предишните си търсения, вече можем да използваме опцията -v, за да обърнем резултатите си и да покажем само линиите, които не съвпадат.

Wildcards

Grep има пълна поддръжка за заместващи символи при съвпадение на шаблони. Когато използвате заместващи символи и други специални символи, искате да сте сигурни, че моделът ви за търсене е в кавички, така че черупката на Linux не се опитва да ги интерпретира преди грешката. Общите заместващи символи включват * за групи знаци и. да представлява само един неизвестен знак.

В диапазона

Ако заместващите символи са твърде широки за вас, можете да посочите отделни знаци или обхват, който да включите в търсенето си. Знаците в квадратни скоби ще бъдат включени в шаблона ви за търсене. Например, ако сте имали файл със списък като

 Точка 1 - ябълки Точка 2 - банани Точка 3 - кокосови продукти Точка 4 - праскови Точка 5 - Грозде Точка 6 - Кайсия 

Можете да изберете конкретен диапазон, като използвате нещо подобно

 grep "Елемент [2-4]" items.txt 

Grep е изключително мощен инструмент и изучаването му може да се изплати по всякакъв начин. Разбирането на grep също така прави много по-лесно да се преминете към други мощни конзолни инструменти като sed и awk. Между тези три инструмента невероятно количество конзола и магия на скрипта може да се направи с много по-малко усилия, отколкото изглежда възможно. Ако сте фен на grep или искате да видите други инструменти като sed и awk тук, моля, отбележете бележка в коментарите.