Grep

Grep (search globally for a regular expression and print) on Unix-käyttöjärjestelmän komentoriviohjelma, joka etsii säännöllisillä lausekkeilla määriteltyjä merkkijonoja tiedostoista. Ohjelman nimi on peräisin ed-tekstieditorin komennosta g/re/p. Ohjelman on kehittänyt Ken Thompson. Ohjelma vaikutti myös sed-rivieditorin kehitykseen.

Tietokoneslangissa greppaus tai greppaaminen tarkoittaa yleensä mitä tahansa merkkijonojen etsimistä.

 Historia 
Ohjelma on peräisin alkuperäisestä Unixista, jonka piti toimia PDP-11 -tietokoneella pienellä muistimäärällä. Ken Thompson teki ed-ohjelman tekstin muokkaamiseen primitiivisillä näyttölaitteilla ilman kursoria. ed salli säännöllisten lausekkeiden avulla, jossa 'g' tarkoitti hakua, 'p' tulostamista ja 're' lauseketta ja tämä esitettiin muodossa: g/re/p. Lee McMahon halusi ohjelman, jolla pystyi hakemaan tiedostosta merkkijonoja ja ongelmana oli, että tiedosto oli tuolloin liian suuri tietokoneen muistimäärälle jotta sitä olisi voitu avata editorissa. Tämän johdosta Thompson teki ohjelman grep.
Alfred V. Aho ja Margaret J. Corasick kehittivät Aho-Corasick -algoritmin merkkijonojen hakemiseen, joka toteutettiin fgrep-versioon ohjelmasta.

 Toteutuksia 
grep-ohjelmasta on useita toteutuksia:
 ensimmäisen toteuttivat Ken Thompson ja Dennis Ritchie
 myöhemmin Lee E. McMahon toteutti uuden version ohjelmasta
 Alfred Aho toteutti egrep- ja fgrep-versiot ohjelmasta 
 BSD-projektin versio, jonka alkuperäiset kehittäjät olivat James Howard ja Dag-Erling Coïdan Smørgrav
 GNU-projektin tekemä versio, jonka alkuperäinen kehittäjä on Mike Haertel
 Pienissä ja sulautetuissa järjestelmissä käytetyn BusyBoxin grep-toteutus perustuu C-kielen standardikirjaston toteutukseen säännöllisille lausekkeille.  

GNU grep käyttää Boyer-Moore -algoritmia, joka ensin hakee haettavan merkkijonon ensimmäisen merkin ja hakutaulun avulla päättelee miten pitkälle eteenpäin se voi hypätä jos merkki ei täsmää haettuun.

Esimerkkejä

 Komentoriviputkessa
Yleinen tapa on liittää ohjelman käyttö komentoriviputkeen:
 $ ps | grep bash
Tämä tapaus esittää ps ohjelman antamasta prosessilistauksesta rivit, joilla esiintyy sana bash.

 Tyhjät rivit
Etsii tiedostosta #tiedosto kaikki tyhjät rivit ja tulostaa ne kaikki oletustulostusvirtaan:
 $ grep -e '^$' #tiedosto

Katso myös
 sed

 Lähteet 

 Kirjallisuutta 


 Aiheesta muualla 
 GNU Grep 3.0 
 User Commands 

Luokka:Unix-ohjelmat