Относно grep за начинаещи

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

Как да търсим?

В основата си grep е изключително прост. Ако трябва да търсите нещо по модел във файл, използвайте командата:

Тази команда ще търси модел в указания файл и ще отпечата в стандартен изход редовете на файла, съдържащ търсения шаблон.

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

Съществува и много разпространена употреба наgrep - филтриране на изходния поток на други програми. Нека си представим например, че искате да получите списък с всички файлове, които са инсталирани от пакет в директорията /usr/bin. В системите на Debian опитайте командата:

За системи с RPM командата ще изглежда така:

По този начин, вместо да изброявате всички файлове в пакет, ще получите само тези, които са предназначени за инсталиране в директорията /usr/bin. Можете да отидете по-далеч и да използвате следното пренасочване на grep, за да стесните резултатите от филтрирането.

Както всичко в UNIX, grep е чувствителен към главни и малки букви по подразбиране. Ако това не работи за вас, просто добавете опцията -i към извикването на grep, след което низовете "SEARCH" и "search" ще станат еквивалентни за него.

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

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

Но ако тичаш

тогаваgrep внимателно ще премине през всички вложени поддиректории и ще потърси модела във файловете на намерените поддиректории.

Търсене в обратен ред

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

Ако искате grep да показва само имената на файловекоито не съдържат редове, които съответстват на шаблона, без да отпечатва самите редове, използвайте опцията-L.

От друга страна, ако искате само имената на файловете, които съответстват на шаблона, но не искате самите низове, използвайте опцията-l.

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

Нямате нужда от имена на файлове в изхода наgrep, интересувате се само от редове - използвайте опцията -h иgrep няма да отпечата имена на файлове.

По подразбиранеgrep извършва алчно търсене. Тоест, той улавя не само частта от низа, която отговаря на шаблона, но и всичко след него. Например, ако търсите "Beat", тогава grep ще съвпадне с "Beatles", "Beaten", "Beats" и всеки низ, съдържащ "Beat". Това поведение на grep не е често полезно на практика и можете да го ограничите с опцията-w. С тази опцияgrep ще избере съвпадения вдумата.

В процеса на търсене в лог файлове често е необходимо да се види в какъв контекст е намерено нещо. По подразбиранеgrep отпечатва само реда, който съвпада, но има няколко опции, за да накаратеgrep да извежда повече: -A (след контекст), -B (преди контекст) и -C (контекст).

Използвайки тезиопции, трябва да посочите самата опция и цяло число, което указва броя на редовете за показване. Например

ще отпечата редовете, където е намерено съвпадение, плюс 2 реда до 2 след всяко съвпадение.

Регулярни изрази

grep може да не е много полезен в ежедневието, ако ще го използвате за търсене само на някои специфични последователности от знаци. Но какво ще стане, ако трябва да намерите например само числа или поредица от знаци, които могат да включват само определени знаци или техните групи? Няма проблем! Използвайки регулярни изрази, получавате инструмент за решаване на почти всеки проблем с търсенето.

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

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

Символът ^ съвпада с началото на ред, а знакът $ съвпада с края му. Например, искате да намерите всички файлове с разширение .html, но не искате файлове с разширение.html.bak:

Ако имате нужда отgrep, за да интерпретирате специалните символи като нормални, предшествайте ги с обратна наклонена черта. Например команда

ще търси редове, съдържащи звездичка в името на файла.

Можете да използвате диапазони и класове знаци в изрази. За да направите това, когато съставяте шаблон в grep, се използват квадратни скоби. Например знак в диапазона от A до Z ще съвпадне с шаблона[A-Z]и всяка цифра ще съвпадне[0-9]. Освен това, като използвате квадратни скоби, можете да съпоставитекласове знаци. Например [:punct:] ще съответства на всеки препинателен знак. За да намерите редове, съдържащи препинателни знаци в края, можете да използвате следната команда:

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

Често в изхода наgrep е трудно веднага да се намери частта от низа, която съответства на шаблона. За да улесните визуалното търсене в резултатите отgrep, можете да я помолите да използва цвят за отбелязване на съвпадения. Просто добавете опцията --color=always или --color=auto.

Имайте предвид, че в някои дистрибуции разработчиците създават псевдоним заgrep, който включва цвета по подразбиране. Например в Linux Mint командата grep е псевдоним grep --color=auto. Ако имате подобна ситуация, използвайте командата grep --color=off в случаите, когато не се нуждаете от цветен изход.

С или без цвят,grep е помощна програма, без която нито "напредналите потребители", нито системните администратори могат да си представят живота. Разбира се, за обикновените потребители на настолни компютри познаването на тази помощна програма може изобщо да не е полезно, въпреки че няма да има голяма вреда, ако я опознаят. Но ако ще работите с Linux на по-високо ниво, тогаваgrep е едно от първите неща, които трябва да научите.