Výukový program: Ako používať Ack a Grep na Ubuntu 14.04

Vyhľadajte a nájdete. V systéme Linux existuje množstvo vyhľadávacích nástrojov na rýchle a presné nájdenie určitých miestnych údajov.


Mohli by sme použiť príkazy na hľadanie príkazov od spoločnosti Digital Ocean" href ="https://www.hostingadvice.com/external/?site=446bc9e98a55bc765badfce49aefe9e585e467ee7fdd065fe32ecfc73fdf79410824a7079171fa4c42ab3b10cc54d651fe0ac21805fea09f5bb463dd40dab693e9549ec22105349b02cead12482fc6c0370fa1598547af28613ee5a77689e3fa894d29fce618bc7f860a1ac9c2b5c02e" cieľovej ="_blank" rel ="noopener">vyhľadajte a nájdite príkazy na nájdenie súborov podľa ich názvu, typu, časových pečiatok, vlastníka alebo veľkosti. Príkaz find môže prehľadávať aj obsah súboru, ale vo väčšine prípadov existuje jednoduchší nástroj nazývaný grep. Ak by sme chceli vyhľadať nejaký relevantný reťazec obsahu v súbore alebo adresári, mohli by sme použiť príkaz grep alebo jeho novšiu alternatívu ack.

Názov „grep“ znamená „global / regular expression / pRinti. ” „G“ je skratka pre „globálne vyhľadávanie“ na Unixe. Grep je možné použiť na zistenie, či vstup súboru, ktorý prijíma, zodpovedá zadanému vzoru; takéto vzorce sa nazývajú regulárne výrazy a niektoré z nich ste už pravdepodobne videli v iných softvérových nástrojoch. V tomto návode budeme používať iba základy regulárnych výrazov, ale v prípade potreby nezabudnite preskúmať ich „hlbšie vody“..

Keď skombinujeme operácie vyhľadávania a filtrovania s inými príkazmi systému Linux, začne sa skutočne prejavovať plná sila programu grep a podobných nástrojov.

Krok 1: Získajte niekoľko vzorových dátových súborov

Ak chcete začať s niektorými bežnými dátami súboru, môžete si stiahnuť zdrojový kód jQuery z ich úložiska Github.

Najprv musíme nainštalovať Git, aby sme mohli sťahovať projekty z Githubu:

1 sudo apt-get install git

Teraz si môžeme stiahnuť zdrojový kód jQuery do nášho domovského adresára:

1
2

cd ~

klon git https://github.com/jquery/jquery.git

Potom prejdite do adresára, ktorý sme práve prevzali:

1 cd jquery

Pozrime sa na súbory v tomto adresári pomocou príkazu ls:

1ls

Vidíme zoznam rôznych typov súborov a niekoľko adresárov:

1 AUTHORS.txt bower.json build CONTRIBUTING.md externý Gruntfile.js LICENSE.txt package.json README.md src test

Pozrime sa, ako by sme mohli nájsť obsah v tomto zdrojovom kóde.

Krok 2a: Použitie Grep

Grep je už nainštalovaný na každom systéme Linux, takže nie je potrebné manuálne inštalovať.

Možnosti príkazov Grep

Toto je zhrnutie možností príkazu grep, ktoré použijeme v tomto tutoriále:

  • -ja nerozlišuje veľké a malé písmená
  • -r číta všetky súbory pod každým adresárom rekurzívne
  • -n zobrazuje číslo riadku každej zhody
  • -C zobrazuje počet zápasov
  • -proti prevrátenie zhody výberom nezhodujúcich sa riadkov
  • -o tlačí iba zhodné časti zhodného riadku, pričom každá časť je na samostatnom výstupnom riadku
  • -w zhoduje sa iba s celými slovami

Základné príklady

Ak chcete nájsť súbory, ktoré obsahovali reťazec „John Resig“ pre každý súbor v aktuálnom adresári, napíšte:

1 grep ‘John Resig’ *

Výsledný výstup by bol:

1
2
3
4
5

AUTHORS.txt: John Resig <[email protected]>

grep: build: Je adresár

grep: external: Je adresár

grep: src: Je adresár

grep: test: Je adresár

„*“ Hovorí grepu, aby sa zhodoval so všetkými súbormi v aktuálnom adresári. Ak náš vyhľadávací vzor obsahuje medzery, musíme do vyhľadávacieho reťazca vložiť úvodzovky (jednoduché úvodzovky alebo dvojité úvodzovky)..

Ak chcete nájsť súbory, ktoré obsahovali reťazec „Autori“ pre každý súbor v aktuálnom adresári, napíšte:

1 grep autori *

Výsledný výstup by bol:

1
2
3
4
5

AUTHORS.txt: Autori sú zoradení podľa prvého príspevku.

grep: build: Je adresár

grep: external: Je adresár

grep: src: Je adresár

grep: test: Je adresár

Grep našiel jeden zodpovedajúci súbor a vytlačil riadok, ktorý zodpovedal nášmu vzoru „Autor“. Všimnite si, že grep tu nezodpovedá názvu súboru, iba obsahu súboru.

Ak by sme to namiesto toho napísali:

1 grep autorov *

Mali by sme vidieť iný zhodný súbor, pretože grep je v predvolenom nastavení citlivý na skrinku znakov.

Mohli by sme použiť voľbu grep z príkazového riadku -i na zapnutie porovnávania znakov bez rozlišovania veľkých a malých písmen, aby sme ignorovali akúkoľvek citlivosť krytu:

1 grep -i autori

Teraz vidíme všetky zhody bez ohľadu na akúkoľvek kombináciu skrinky znakov, ktorú sme mohli použiť v našom vyhľadávacom vzorci.

Ak chcete vykonať rovnaké vyhľadávanie vo všetkých adresároch (v našom aktuálnom adresári), môžeme pridať voľbu -r rekurzívne:

1 autori grep -i -r *

Teraz bude grep prehľadávať všetky adresáre a ich rekurzie, až kým sa to neurobí.

Rovnaký príkaz je možné skrátiť kombináciou možností a získať rovnaký výsledok:

1 grep -ir autorov *

Aby sme videli čísla riadkov zodpovedajúcich výsledkov, pridáme voľbu -n:

1 grep -irn autori *

Ak chcete vyhľadať v súbore AUTHORS.txt riadky s doménou „gmail.com“:

1 grep -i gmail.com AUTHORS.txt

Ak by sme chceli spočítať všetky zhody z predchádzajúceho vyhľadávania, pridali by sme voľbu -c:

1 grep -ic gmail.com AUTHORS.txt

Mali by sme vidieť vytlačené číslo, ktoré udáva počet zhodných riadkov.

Na prevrátenie nášho predchádzajúceho vyhľadávacieho vzoru „gmail.com“ by sme použili možnosť -v:

1 grep -iv gmail.com

Teraz vidíme všetky riadky bez reťazca „gmail.com“ – veľmi užitočná funkcia.

Môžeme vyhľadávať aj celé slová. Umožňuje bez rozlišovania veľkých a malých písmen vyhľadať slovo „chyba“.

1 grep -i -w bug *

Voľba -w núti náš vzorec, aby sa zhodoval iba s celými slovami, takže slová obsahujúce reťazec „bug“ (napr. „Bug“) by neboli platnou zhodou..

Ak by sme chceli zistiť, koľkokrát bolo v zdrojovom kóde uvedené slovo „jquery“, dali by sme „|“A potom zadajte príkaz wc wordcount s filtrom -l, takže počítame iba riadky – nie počet slov alebo znakov. Voľba -o sa používa na tlač každej zodpovedajúcej časti na samostatný výstupný riadok, inak by náš počet nebol správny.

1 grep -iro jquery * | wc -l

Ak urobíme vyhľadávanie, ktoré vráti veľa zhôd, môžeme priviesť grepový výstup k menšiemu. Menej je stránkovací nástroj, ktorý uľahčuje prechádzanie všetkých výstupov pomocou , , Klávesy „page-up“ alebo „page-down“ alebo lišta SPACE.

1 grep -ir jquery * | menej

Môžeme tiež spojiť niekoľko príkazov grep dohromady, aby sme mohli ľahko filtrovať výsledky každého predchádzajúceho príkazu.

1 grep -ir jquery * | grep -i json | menej

Pokročilé príklady

Na vytvorenie oveľa presnejších vzorov zhody budeme musieť použiť regulárne výrazy.

Povedzme napríklad, že sme chceli nájsť autorov s menom „Chris“ alebo „John“, ale nie „Christopher“, „Christian“ alebo s iným vzorom na krstné meno..

1 grep -E "(^ Chris) | (^ John)" AUTHORS.txt

A voilà, vidíme všetkých autorov s menom Chris alebo John.

Možnosť -E povie grepovi, aby interpretoval náš vzorec vyhľadávania ako rozšírený regulárny výraz. Tento vzor obsahuje dve zhodné časti „(^ Chris)“ a „(^ John)“, ktoré sú oddelené symbolom potrubia: „|“, čo predstavuje logiku alebo funkciu. Ak sa ktorákoľvek z týchto dvoch častí zhoduje, vytlačíme výsledok. Ak chcete hľadať iba krstné mená, používame symbol „^“, ktorý predstavuje funkciu začiatku riadku. Chceme teda, aby sa naše vzory mien zhodovali iba na začiatku riadkov.

Ak sa chcete dozvedieť viac o používaní grepu s regulárnym výrazom, prečítajte si tento návod. Zvládnutie regulárnych výrazov je zručnosť, ktorá stojí za to pracovať.

Krok 2b: Použitie Ack

Ack je vyhľadávací nástroj ako len grep, ale je optimalizovaný na vyhľadávanie v stromoch zdrojového kódu. Ack robí takmer všetko, čo robí grep, ale líši sa nasledujúcimi spôsobmi.

Ack bol navrhnutý tak, aby:

  • V predvolenom nastavení vyhľadajte adresáre rekurzívne
  • Ľahko vylúčte určité typy súborov alebo vyhľadajte iba určité typy súborov
  • V predvolenom nastavení ignorujte bežné adresáre riadenia verzií; jedná sa o adresáre s menami ako: .git, .gitignore, .svn
  • Predvolene ignorovať binárne súbory; Sú to súbory ako: binárne spustiteľné súbory, obrazové / hudobné / video súbory, archívne súbory gzip / zip / tar
  • Majte lepšie zvýraznenie zápasov a tiež čistejšie naformátujte výstup

Ako už bolo povedané, jedným prípadom, v ktorom je grep často rýchlejší ako ack je, ak hľadáte veľmi veľké súbory hľadajúce pomocou regulárnych výrazov.

Inštalácia Ack

Ak chcete začať, prvým krokom je inštalácia nástroja ack do počítača.

Na stroji Ubuntu alebo Debian je to také jednoduché ako inštalácia pomôcky z predvolených úložísk. Balík sa nazýva ack-grep:

1
2

aktualizácia sudo apt-get

sudo apt-get install ack-grep

Nazýva sa program ack-grep alebo ack?

Názov programu je „ack“. Niektorí baliarne to nazývajú „ack-grep“ pri vytváraní balíkov, pretože tam už existuje balík nazývaný „ack“, ktorý s týmto ackom nemá nič spoločné. Ak chceme zadaním tohto príkazu, môžeme nášmu systému Linux povedať, aby skrátil tento príkaz na „ack“:

1 sudo dpkg-divert –local –divert / usr / bin / ack –rename –add / usr / bin / ack-grep

Teraz bude nástroj namiesto názvu „ack-grep“ odpovedať na meno „ack“.

Možnosti príkazu Ack

Toto je zhrnutie možností príkazu ack, ktoré použijeme v jeho tutoriále:

  • -ja nerozlišuje veľké a malé písmená
  • -f-X vytlačí iba súbory, ktoré by sa prehľadali, bez toho, aby sa skutočne uskutočnilo akékoľvek vyhľadávanie, kde „X“ označuje typ súboru (napr. „–html“)
  • -n nespadá do žiadnych podadresárov.
  • -w zhoduje sa iba s celými slovami
  • -type = Nox vylúči z vyhľadávania určité typy súborov, kde „X“ označuje typ súboru, ktorý sa má vylúčiť (napr. „–type = nophp“ na vylúčenie súborov PHP)

Základné príklady

Pozrime sa znova na náš zdrojový strom jQuery, aby sme zistili, ako ack optimalizuje vyhľadávanie kódu.

1 ack -i autori *

Vidíme tento výsledok:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

rs.txt

1: Autori objednaní na základe prvého príspevku.

 

bower.json

12: "AUTHORS.txt",

 

externá / prskanie / MIT-License.txt

18: NEZASAHOVANIA. V žiadnom prípade NEBOLI AUTORI ALEBO DRŽITELIA AUTORSKÝCH práv

 

externá / qunit / MIT-License.txt

18: NEZASAHOVANIA. V žiadnom prípade NEBOLI AUTORI ALEBO DRŽITELIA AUTORSKÝCH práv

 

lICENSE.TXT

27: NEZASAHOVANIA. V žiadnom prípade NEBOLI AUTORI ALEBO DRŽITELIA AUTORSKÝCH práv

 

package.json

10: "url": "https://github.com/jquery/jquery/blob/master/AUTHORS.txt"

41: "grunt-git Autori": "1.2.0",

Porovnajte vyššie uvedený výstup so skutočnou verziou tohto vyhľadávania:

1 grep -i autori *

Vidíme tento výsledok:

1
2
3
4
5
6
7
8
9

AUTHORS.txt: Autori sú zoradení podľa prvého príspevku.

bower.json: "AUTHORS.txt",

grep: build: Je adresár

grep: external: Je adresár

LICENSE.TXT: NEZASAHOVANIA. V žiadnom prípade NEBOLI AUTORI ALEBO DRŽITELIA AUTORSKÝCH práv

package.json: "url": "https://github.com/jquery/jquery/blob/master/AUTHORS.txt"

package.json: "grunt-git Autori": "1.2.0",

grep: src: Je adresár

grep: test: Je adresár

Všimnite si, ako sa vyhľadávanie Ack v predvolenom nastavení vykonáva rekurzívne a každá zhoda sa tlačí na vlastný riadok s predvoleným číslom riadku. Formátovanie je o niečo ľahšie čitateľné, najmä ak existuje veľa zhôd.

Tieto predvolené hodnoty a formátovanie sú pekné, keď často prehľadávate kódové stromy.

Ack však dokáže urobiť viac. Umožňuje nájsť všetky súbory HTML v zdrojovom strome.

1 ack -f –html

Voľba -f vytlačí iba súbory, ktoré by sa prehľadali, bez toho, aby sa skutočne vyhľadalo. Voľba –html je špeciálna vlastnosť ack. Ack rozumie mnohým typom súborov a zadaním tejto možnosti požiadate, aby vyhľadával iba súbory HTML.

Hľadáme slovo „bug“ vo všetkých súboroch JavaScript bez rozlišovania veľkých a malých písmen.

1 ack -i -w –js chyba

Voľba –js povie ack, aby prehľadával iba súbory JavaScript. Môžete vyhľadávať všetky druhy ďalších typov súborov, napr. –Php, –python, –perl, et cetera. Toto filtrovanie podľa typu súboru umožní rýchlejšie vyhľadávanie, najmä na väčších zdrojových stromoch.

Niekedy nechceme robiť rekurzívne vyhľadávanie. Ak chcete hľadať v aktuálnom adresári iba slovo „bug“, napíšeme:

1 ack -n -w bug

Voľba -n hovorí, že nie je potrebné zostúpiť do žiadneho podadresára.

Urobme rekurzívne vyhľadávanie slova „css“, ale vylúčime všetky súbory JavaScript:

1 ack -w –type = nojs css

Voľba –type = noX umožňuje vylúčenie typov súborov známych ack, kde „X“ označuje typ súboru, ktorý sa má vylúčiť.

Pokročilé príklady

Rovnaký regulárny výraz, aký sme použili pri grepe, bude fungovať aj pre ack:

1 ack "(^ Chris) | (^ John)" AUTHORS.txt

Ack má čo ponúknuť oveľa viac, ako je tu uvedené. Podrobnejšie informácie o používaní ack nájdete v oficiálnej dokumentácii.

Ostatné nástroje podobné grepom

Tu je niekoľko ďalších skvelých vyhľadávacích nástrojov, ktoré stoja za preskúmanie.

  • zgrep – Nástroj Grep, ktorý dokáže prehľadávať komprimované súbory (napr. Komprimované protokolové súbory)
  • Agrep – Grep-like nástroj s podporou pre približné vzory
  • JQ – Nástroj príkazového riadku na vyhľadávanie v súboroch JSON a štruktúrovanie výsledného výstupu (ako platný JSON)
  • xgrep, xmlgrep, xmlstar – Jedná sa o podobné nástroje príkazového riadku na prehľadávanie obsahu súborov XML
  • pdfgrep – Nástroj príkazového riadku na prehľadávanie obsahu súborov PDF
  • git grep – Vstavaný vyhľadávací nástroj systému verzií Git
Jeffrey Wilson Administrator
Sorry! The Author has not filled his profile.
follow me
    Adblock
    detector