programmera.net -> linux -> normal     för utskrift      info@programmera.net

Programmet grep

Kommandot letar upp alla rader som innehåller en viss textsträng (eller reguljärt uttryck) från de filer man specifierar och skriver ut dessa på skärmen. Nedan listas några användbara flaggor:

Flagga  Betydelse  Beskrivning
grep foo a.txt     Skriver ut alla rader i a.txt som innehåller foo.
grep -c foo a.txt  count  Skriver ut antalet rader i a.txt som innehåller foo.
grep -f search.txt a.txt  file  Filen search.txt innehåller de sökta texterna.
grep -h foo *  no header  Skriver ut de rader som innehåller foo utan filnamnet först på varje rad.
grep -H foo *  header  Skriver ut de rader som innehåller foo med filnamnet först på varje rad.
grep -i foo a.txt  ignore case  Skriver ut alla rader som innehåller foo, oberoende av stora och små bokstäver.
grep -l foo *  list  Skriver ut namnet på alla filer som innehåller foo.
grep -L foo *  list  Skriver ut namnet på alla filer som inte innehåller foo.
grep -n foo a.txt  number  Skriver ut alla rader innehållande foo med radnummret före.
grep -r foo *  recursive  Skriver ut alla rader innehållande foo i från alla filer i alla underkataloger.
grep -q foo *  quiet  Skriver bara ut felmeddelanden som t. ex. att kataloger inte kan läsas från.
grep -s foo *  silent  Skriver ut alla rader innehållande foo men inga felmeddelanden.
grep -v foo a.txt     Skriver ut alla rader som inte innehålle foo.
grep -w foo a.txt  word  Skriver ut alla rader som innehåller ORDET foo. Alltså texten foo avgränsad av mellanslag, tab eller retur.
grep -x foo a.txt     Skriver ut alla rader som bara innehåller foo.

Vi har en fil c.txt som ser ut såhär:
[olle@dev1]$ cat c.txt
hej alla 
glada
Ett exempel med grep är:
[olle@dev1]$ grep alla c.txt
hej alla
Om du vill söka efter alla rader som innehåller bokstaven l skriver man bara:
[olle@dev1]$ grep l c.txt
hej alla
glada
Ofta vill man ta bort alla rader som innehåller ett visst ord. Detta görs genom att man använder flaggan v:
[olle@dev1]$ grep -v l c.txt
katter
När man använder grep på bara en fil skrivs inte filnamnet ut framför varje träff. Med flaggan H (header) kan man tvinga fram filnamnet:
[olle@dev1]$ grep -H alla c.txt
c.txt:hej alla
Då man söker genom flera filer skrivs filnamnet ut framför varje träff, men det kan man undvika genom flaggan h:
[olle@dev1]$ grep -h alla *
hej alla
Flaggan r låter dig söka igenom alla filer i alla underkataloger:
[olle@dev1]$ grep -r alla *
hej alla