6 parasta CLI-työkalua pelkän tekstidatan etsimiseen säännöllisten lausekkeiden avulla


Tässä oppaassa tutustutaan joihinkin parhaista komentorivityökaluista, joita käytetään etsimään vastaavia merkkijonoja tai kuvioita tekstitiedostoista. Näitä työkaluja käytetään yleensä säännöllisten lausekkeiden rinnalla - lyhennettynä nimellä REGEX -, jotka ovat ainutlaatuisia merkkijonoja hakukuvion kuvaamiseen.

Sukellamme sisään ilman paljon muuta.

1. Grep-komento

Ensinnäkin on grep-apuohjelma - se on lyhenne sanoista Global Regular Expression Print, on tehokas komentorivityökalu, joka on kätevä etsittäessä tiettyä merkkijonoa tai mallia tiedostosta.

Grep toimittaa oletusarvoisesti modernit Linux-jakelut ja antaa sinulle joustavuuden palauttaa erilaisia hakutuloksia. Grepillä voit suorittaa laajan valikoiman toimintoja, kuten:

  • Etsi merkkijonoja tai vastaavia kuvioita tiedostosta.
  • Etsi merkkijonoja tai vastaavia kuvioita Gzip-tiedostoista.
  • Laske merkkijono-osumien määrä.
  • Tulosta rivinumerot, jotka sisältävät merkkijonon tai kuvion.
  • Hae merkkijonoa rekursiivisesti hakemistoista.
  • Suorita käänteinen haku (ts. näyttää merkkijonojen tulokset, jotka eivät vastaa hakuehtoja).
  • Ohita merkkijonoja kirjainkoolla.

Grep-komennon syntaksi on melko yksinkertainen:

$ grep pattern FILE

Esimerkiksi, jos haluat etsiä merkkijonoa 'Linux' tiedostosta, esimerkiksi hello.txt, välittämättä kirjainkoon, suorita komento:

$ grep -i Linux hello.txt

Saadaksesi lisää vaihtoehtoja, joita voit käyttää grepin kanssa, lue vain artikkeli, jossa on esimerkkejä edistyneemmistä grep-komentokomennoista.

2. sed komento

manipulointiteksti tekstitiedostossa. Sed etsii, suodattaa ja korvaa merkkijonot tietyssä tiedostossa ei-vuorovaikutteisella tavalla.

Oletusarvoisesti sed-komento tulostaa lähdön STDOUT-tiedostoon (Standard Out), mikä tarkoittaa, että suorituksen tulos tulostetaan päätelaitteeseen sen sijaan, että se tallennettaisiin tiedostoon.

Sed-komento käynnistetään seuraavasti:

$ sed -OPTIONS command [ file to be edited ]

Esimerkiksi, jos haluat korvata kaikki Unix-esiintymät Linuxilla, ota komento:

$ sed 's/Unix/Linux' hello.txt

Jos haluat ohjata lähdön tulostamisen sijaan päätelaitteeseen, käytä uudelleenohjausmerkkiä (>) kuvan osoittamalla tavalla.

$ sed 's/Unix/Linux' hello.txt > output.txt

Komennon lähtö tallennetaan output.txt-tiedostoon sen sijaan, että se tulostettaisiin ruudulle.

Katso lisää käytettävissä olevia vaihtoehtoja tutustumalla jälleen man-sivuihin.

$ man sed

3. Ack-komento

Ack on nopea ja kannettava komentorivityökalu, joka on kirjoitettu Perlissä. Ackia pidetään ystävällisenä korvauksena grep-apuohjelmasta, ja se tuottaa tuloksia visuaalisesti.

Ack-komento etsii tiedostosta tai hakemistosta rivejä, jotka sisältävät hakuehtojen vastaavuuden. Sitten se korostaa vastaavan merkkijonon rivillä.
Ack pystyy erottamaan tiedostot tiedostotunnisteidensa ja tietyssä määrin tiedostojen sisällön perusteella.

Ack-komentosyntaksi:

$ ack [options] PATTERN [FILE...]
$ ack -f [options] [DIRECTORY...]

Voit esimerkiksi tarkistaa hakutermin Linux suorittamalla:

$ ack Linux hello.txt

Hakutyökalu on varsin älykäs ja jos käyttäjä ei tarjoa tiedostoa tai hakemistoa, se etsii hakumallin nykyisestä hakemistosta ja alihakemistoista.

Alla olevassa esimerkissä tiedostoa tai hakemistoa ei ole toimitettu, mutta ack on havainnut automaattisesti käytettävissä olevan tiedoston ja etsinyt vastaavaa mallia.

$ ack Linux

Asenna ack järjestelmään suorittamalla komento:

$ sudo apt install ack-grep    [On Debian/Ubuntu]
$ sudo dnf install ack-grep    [On CentOS/RHEL]

4. Awk-komento

Awk on täysimittainen komentosarjakieli ja myös tekstinkäsittely- ja datankäsittelytyökalu. Se etsii tiedostoja tai ohjelmia, jotka sisältävät hakukuvion. Kun merkkijono tai kuvio löytyy, awk toimii ottelussa tai viivassa ja tulostaa tulokset STDOUT: lle.

AWK-kuvio on suljettu kiharoiden aaltosulkeiden väliin, kun taas koko ohjelma on suljettu lainausmerkkeihin.

Otetaan yksinkertaisin esimerkki. Oletetaan, että tulostat järjestelmän päivämäärän kuvan osoittamalla tavalla:

$ date

Oletetaan, että haluat tulostaa vain ensimmäisen arvon, joka on viikonpäivä. Putki siinä tapauksessa lähtö awk: ksi kuvan osoittamalla tavalla:

$ date | awk '{print $1}'

Voit näyttää seuraavat arvot erottamalla ne pilkulla kuvan osoittamalla tavalla:

$ date | awk '{print $1,$2}'

Yllä oleva komento näyttää viikonpäivän ja kuukauden päivämäärän.

Saadaksesi lisää vaihtoehtoja, joita voit käyttää awk: n kanssa, lue yksinkertaisesti awk-komentosarja.

5. Hopeanhaku

Hopeanhaku on monialustainen ja avoimen lähdekoodin hakutyökalu, joka on samanlainen kuin ack, mutta painottaa nopeutta. Sen avulla on helppo etsiä tiettyä merkkijonoa tiedostoista mahdollisimman lyhyessä ajassa:

Syntaksi:

$ ag OPTIONS search_pattern /path/to/file

Esimerkiksi, jos haluat etsiä merkkijonoa Linux tiedostosta hello.txt, kutsu komento:

$ ag Linux hello.txt

Lisää vaihtoehtoja on man-sivuilla:

$ man ag

6. Ripgrep

Viimeiseksi meillä on ripgrep-komentorivityökalu. Ripgrep on alustojen välinen apuohjelma regex-kuvioiden hakemiseen. Se on paljon nopeampi kuin kaikki aiemmin mainitut hakutyökalut ja etsii rekursiivisesti hakemistoista vastaavia malleja. Nopeuden ja suorituskyvyn suhteen mikään muu työkalu ei erotu Ripgrepistä.

Oletuksena ripgrep ohittaa binaaritiedostot/piilotetut tiedostot ja hakemistot. Huomaa myös, että se ei oletusarvoisesti etsi tiedostoja, jotka .gitignore/.ignore/.rgignore-tiedostot jättävät huomiotta.

Ripgrepin avulla voit myös etsiä tiettyjä tiedostotyyppejä. Voit esimerkiksi rajoittaa haun koskemaan Javascript-tiedostoja:

$ rg -Tsj

Ripgrepin syntaksin käyttö on melko helppoa:

$ rg [OPTIONS] PATTERN [PATH...]

Esimerkiksi. Jos haluat etsiä merkkijonon ”Linux” esiintymiä nykyisen hakemiston sisällä olevista tiedostoista, suorita komento:

$ rg Linux

Asenna ripgrep järjestelmään suorittamalla seuraavat komennot:

$ sudo apt install ripgrep      [On Debian/Ubuntu]
$ sudo pacman -S ripgrep        [On Arch Linux]
$ sudo zypper install ripgrep   [On OpenSuse]
$ sudo dnf install ripgrep      [On CentOS/RHEL/Fedora]

Lisää vaihtoehtoja on man-sivuilla:

$ man rg

Nämä ovat joitain yleisimmin käytettyjä komentorivityökaluja tekstin hakemiseen, suodattamiseen ja käsittelyyn Linuxissa. Jos sinulla on muita työkaluja, jotka mielestäsi olemme jättäneet pois, ilmoita siitä meille kommenttiosassa.