2.0 KiB
+++ title = "grep" draft = false tags = [ "unix", "cmd", "grep" ] date = "2013-03-12" +++
Greppin' away
❗ Combinatievoorbeeld met find te vinden op [unix/cmd]({{< relref "wiki/unix/cmd.md" >}}).
Surrounding lines while greppin'
Dit heet lines in context in man grep.
grep -B 3 -A 2 foo README.txt
Verklaring: Zoek foo in readme.txt met 3 lijnen boven en 2 lijnen onderaan.
Indien aantal lijnen gelijk, gebruik simpelweg -C [x]
.
Inverse grepping
In file contents
Om te zoeken naar bijvoorbeeld 'hond', maar niet 'kat', moet je inverse zoeken voor kat:
cat file | grep 'hond' | grep -v 'kat'
Finding pattern a OR b
Combineren gaat met het pipe character (escaped) <br/>|
- voorbeeld zoekt naar hond of kat:
cat file | grep 'hond<br/>|kat'
❗ Normale manier is egrep pattern1|pattern2
gebruiken of grep -E pattern1|pattern2
.
Toon meer info bij context
grep 'zoekstring' file.bla -n -H
Print ook line numbers & filename, vooral handig wanneer dit van een -exec
commando komt van een search, bijvoorbeeld:
find . -name "*.php" -exec grep 'backlink' {} -C 2 -n -H <br/>; > find_backlinks.txt
- Zoek alle .php files vanaf de current directory
- Zoek in alle gevonden files naar 'backlink'
- Print 2 bovenste en onderste context lijnen af
- Print lijn nummer en prefix met bestandsnaam
- Output alles naar find_backlinks.txt
De -print
flag bij find print de filename af voor elke gevonden file die naar de -exec
doorgegeven wordt.
❗ Onder Solaris een commando uitvoeren met -exec
moet dit ook nog gewrapped worden met een shell executable, zo:
find . -name "*.php" -exec sh -c 'grep -n "backlink" $1' {} {}<br/>; -print
Vergeet niet dat grep ook andere argumenten (of volgorde) heeft (eerst flags dan search pattern en file, geen -C option etc)!
Zie http://www.compuspec.net/reference/os/solaris/find/find_and_execute_with_pipe.shtml