Пример за употреба на Linux grep командата

Вовед

Командата Linux grep се користи како метод за филтрирање на влез.

GREP се залага за Глобален регуларен израз за печатење и затоа, со цел ефикасно да го искористите, треба да имате некои сознанија за регуларните изрази.

Во оваа статија, јас ќе ви покажам голем број примери кои ќе ви помогнат да ја разберете командата grep.

01 од 09

Како да пребарувате за низа во датотека користејќи GREP

Linux Grep команда.

Замислете дека имате текстуална датотека наречена книги со следните детски наслови:

За да ги пронајдете сите книги со зборот "The" во насловот, ќе ја користите следната синтакса:

grep книги

Следниве резултати ќе бидат вратени:

Во секој случај, зборот "The" ќе биде обележан.

Забележете дека пребарувањето е чувствително на големи букви, па ако некој од наслови има "на", наместо "На", тогаш тоа нема да биде вратено.

За да го игнорирате случајот можете да го додадете следниов прекинувач:

grep книги - игра за игра

Можете исто така да го користите -i прекинувачот како што следува:

grep -i книги

02 од 09

Пребарај за низа во датотека со помош на знаци

Grep командата е многу моќна. Можете да користите мноштво техники за појавување на модел за да ги филтрирате резултатите.

Во овој пример, ќе ви покажам како да барате стринг во датотека со помош на знаци .

Замислете дека имате датотека наречена места со следните шкотски имиња:

абердин

аберистит

аберлор

inverurie

инвернес

newburgh

нов елен

нов галовеј

glasgow

edinburgh

Ако сакате да ги најдете сите места со инвер во името, користете ја следнава синтакса:

grep inver * места

Маска со ѕвездичка (*) е 0 или многу. Затоа, ако имате место наречено инвер или место наречено инверзија, тогаш и двете ќе бидат вратени.

Друга маска која можете да ја користите е периодот (.). Можете да го користите ова за да одговарате на едно буква.

grep inver.r места

Горенаведената команда ќе најде места наречени инвериери и инвертери, но нема да најде инверзија, бидејќи може да има само една маска помеѓу двата р, како што се означува со единствен период.

Добриот период е корисен, но може да предизвика проблеми ако го имате како дел од текстот што го барате.

На пример, погледнете ја оваа листа на имиња на домени

За да ги најдете сите o.com, можете само да пребарувате со следнава синтакса:

grep * за * имиња на домени

Горенаведената команда ќе падне ако листата го содржи следново име во неа:

Затоа, би можеле да ја пробате следнава синтакса:

grep * about.com домените

Ова ќе функционира ако не постои домен со следното име:

aboutycom.com

За да навистина барате поимот about.com, ќе треба да избегате од точка како што следува:

grep * за домените на .com .com

Конечната маска што ќе ти го покаже е прашалник кој стои за нула или еден знак.

На пример:

grep? ber placenames

Горенаведената команда ќе го врати абердин, аберстивит или дури и бервик.

03 од 09

Пребарај ги низите на почеток и крај на линијата Користејќи grep

Каратите (^) и вредноста на доларот ($) ви овозможуваат да пребарувате за шаблони на почетокот и крајот на линиите.

Замислете дека имате датотека наречена фудбал со следните имиња на тимови:

Ако сакавте да ги најдете сите тимови што започнале со Манчестер, би ја користеле следната синтакса:

grep ^ Манчестер тимови

Горенаведената команда ќе ги врати Манчестер Сити и Манчестер Јунајтед, но не и ФК Обединета Манчестер

Алтернативно, можете да ги најдете сите тимови кои завршуваат со Обединетите, користејќи ја следнава синтакса:

grep Обединети тимови

Горенаведената команда ќе ги врати Манчестер Јунајтед и Њукасл Јунајтед, но не и ФК Обединета Манчестер

04 од 09

Броење на бројот на натпревари користејќи grep

Ако не сакате да ги вратите вистинските линии кои се совпаѓаат со шема користејќи grep, но само сакате да знаете колку има, можете да ја користите следната синтакса:

grep -c шема влезна датотека

Ако образецот се совпадна два пати, бројот 2 ќе се врати.

05 од 09

Наоѓање на сите термини кои не се совпаѓаат со користење на grep

Замислете дека имате листа на имиња на места со земјите наведени на следниов начин:

Можеби сте забележале дека колоњскиот залив нема земја поврзана со неа.

За да ги барате сите места со земја, можете да ја користите следната синтакса:

grep земјиште $ места

Резултатите се враќаат на сите места освен за заливот Колвин.

Ова очигледно работи само за места кои завршуваат во земјата (тешко научни).

Можете да го инвертирате избирањето користејќи ја следнава синтакса:

grep -v земјиште $ места

Ова ќе ги пронајде сите места што не завршуваат со земја.

06 од 09

Како да пронајдете празни линии во датотеките користејќи grep

Замислете дека имате влезна датотека која се користи од трета страна апликација која престанува да ја чита датотеката кога ќе најде празна линија како што следува:

Кога апликацијата ќе стигне до линијата по Liverpool ќе престане да чита значење, Colwyn Bay се пропушта целосно.

Можете да користите grep за да пребарувате за празни линии со следнава синтакса:

grep ^ $ места

За жал, ова не е особено корисно, бидејќи само враќа празни линии.

Се разбира, може да се добие број на празни линии како чек за да се види дали датотеката е валидна на следниов начин:

grep -c ^ $ места

Сепак, би било покорисно да ги знаете броевите на линиите кои имаат празна линија, така што можете да ги замените. Можете да го направите тоа со следнава команда:

grep-n ^ $ места

07 од 09

Како да пребарувате за низи од горните или ниските карактери Користење на grep

Користејќи grep можете да одредите кои линии во датотеката имаат големи букви, користејќи ја следнава синтакса:

grep '[AZ]' име на датотека

Квадратните загради [] ви овозможуваат да го одредите опсегот на карактери. Во горенаведениот пример се совпаѓа секој лик кој е помеѓу A и Z.

Затоа, за да одговарате мали букви, можете да ја користите следната синтакса:

grep '[az]' име на датотека

Ако сакате да одговарате само на букви, а не на нумерички или други симболи, можете да ја користите следнава синтакса:

grep '[a-zA-Z]' име на датотека

Можете да го сторите истото со броеви како што следува:

grep '[0-9]' име на датотека

08 од 09

Барате Повторувачки Шаблони Користење на grep

Можете да ги користите кадрава заграда {} за да барате повторувачки образец.

Замислете дека имате датотека со телефонски броеви како што следува:

Знаете дека првиот дел од бројот треба да биде три цифри и сакате да ги најдете линиите што не се совпаѓаат со овој модел.

Од претходниот пример, знаете дека [0-9] ги враќа сите броеви во датотека.

Во овој случај сакаме линиите кои започнуваат со три броја проследени со цртичка (-). Можете да го направите тоа со следната синтакса:

grep "^ [0-9] [0-9] [0-9] -" броеви

Како што знаеме од претходните примери, карата (^) значи дека линијата мора да започне со следниов модел.

[0-9] ќе бара било кој број помеѓу 0 и 9. Бидејќи ова е вклучено трипати, тој се совпаѓа со 3 броеви. Конечно, постои цртичка за означување дека цртичката мора да ги наследи три броја.

Со користење на кадравите загради можете да направите пребарување помало како што следува:

grep "^ [0-9] \ {3 \} -" броеви

Косачот избега од {заградата, така што работи како дел од регуларниот израз, но во суштина, ова се вели [0-9] {3}, што значи дека секој број помеѓу 0 и 9 три пати.

Кадравите загради можат да се користат и на следниов начин:

{5,10}

{5,}

{5,10} значи дека карактерот што се бара мора да се повтори најмалку 5 пати, но не повеќе од 10 додека {5,} значи дека карактерот мора да се повторува најмалку 5 пати, но може да биде повеќе од тоа.

09 од 09

Користење на излез од други команди Користење на grep

Досега го разгледувавме совпаѓањето на моделот во рамките на одделните датотеки, но grep може да го користи излезот од други команди како влез за појавување на моделот.

Одличен пример за ова е користење на командата ps која ги наведува активните процеси.

На пример, извршете ја следнава команда:

ps -ef

Сите процеси кои се извршуваат на вашиот систем ќе бидат прикажани.

Можете да го користите grep за да барате одреден процес на трчање на следниов начин:

ps -ef | grep firefox

Резиме

Grep командата е основна команда на Линукс и таа е добро вредна за учење, бидејќи тоа ќе го направи животот многу полесен при пребарување на датотеки и процеси при користење на терминалот.