Grep es un comando Unix que sirve para buscar cadenas de texto en archivos.
basicamente funciona así:
grep cadenaabuscar archivoendondesebusca
si la cadena es larga y contiene espacios se puede usar ' ':
grep 'cadena a buscar' archivoendondebusca
si queremos que grep nos diga solo las linias que empiezan con una cadena:
grep '^cadena con la que debe iniciar la linia' archivo.txt
si queremos que a grep no le importen las mayusculas o las minusculas usamos -i
grep -i CadenAaBuscar archivo.txt
si queremos que grep busque una palabra en cualquier lugar de la linea usamos $
grep 'palabra$' archivo.txt
se diferencia de
grep 'palabra' archivo.txt --> en que este segundo comando buscará la palabra aunque este metida en otra palabra asi: parangacutitidimicuaropalabraparangacutitidimicuaro
si queremos que grep nos ensene las liniea donde NO ESTA una cadena usaremos -vi
grep -vi 'cadenaquenoquiero' archivo.txt
tambien podemos decirle a grep que busque en un grupo de archivos cuyo nombre empieza con asi "arch" por ejemplo, asi:
grep 'buscaesto" arch*
y el nos dara un resultado diciendo donde lo encontro y que:
archivo1.txt:buscaestoaqui
archivo2.txt:buscaestoalla
y si solo queremos que grep nos diga en que archivo esta podemos usar -l (list) que ademas podemos combinar con las otras y hacer un -vil
grep -l '3' arch*
archivo1.txt
archivo2.txt
podemos tambien decirle a grep que nos ensene una linea antes o despues de la liniea encontrada con grep -C cuantaslinias -i "cadena" archivo.txt
... cuantaslinias
liniadearriba
cadena
liniadeabajo
... cuantaslinias
claro, con numeros:
grep -C 2 -i "cadena" archivo.txt
ah, apropósito tambien sirven las comillas dobles "" en lugar de simples ''
tambien podemos decirle a grep que consiga las lineas que contienen caracteres entre una secuencia, como desde el 0 al 5 asi:
grep [0-5] archivo.txt
linea con un 2
linea con un 4
1 linea
3 linea
la linia con un 6 no saldrá
si solo queremos que grep encuentre las lineas que comienzan con estos numeros usamos ^
grep [^0-5] archivo.txt
1 linea
3 linea
y las otras dos que no comienzan con los numeros de las secuencia buscada no saldran
grep tambien se entiende bien con directorios, asi si estamos en un directorio que contiene otro llamado "carpeta" podemos decirle a grep
grep 'cadena' carpeta/*
y si queremos una busqueda recursiva (que incluya subcarpetas) podemos usar -r
grep -r cadena carpeta/*
la opcion -n nos permitira ver el numero de línia donde esta la cadena
~\> grep -n [0-3] test.txt
2:testing 1
3:Testing 2
4:TesT 3
Uno muy útil, mostrar el contenido de un fichero omitiendo las linieas comentadas. Por ejemplo para apache.conf etc:
grep -v ^# autofs.conf
quitar las lineas vacias:
grep . archivo.txt
y quitar las linias comentadas y las vacias:
grep -v ^# archivo.txt | grep .
comparar dos ficheros: mejor que grep en este caso te recomiendo sdiff (super-diferencias, en realidad sidebysidediff) que te muestra los resultados ordenadamente en una tablita...
sdiff archivo1.txt archivo2.txt
aparte de sdiff tambien existe un diff, un poco mas primitivo que el primero, aunque en algunos casos podria ser útil, la sintaxis es la misma
Aqui una tablita util de opciones de grep:
Option | Beschreibung |
---|---|
-r | Setze die Suche rekursiv durch alle Unterverzeichnisse fort. Funktioniert nur bei der Verwendung von Wildcards einwandfrei |
-c | Anzeige der Anzahl Zeilen, in denen das Muster gefunden wurde |
-i | Groß- und Kleinschreibung werden nicht unterschieden |
-l | Nur Anzeige der Namen der Dateien, in denen das Muster gefunden wurde |
-n | Zeigt die Zeilennummer an, in der das Muster gefunden wurde |
-s | Unterdrückt die Fehlerausgaben (Standardfehler); sinnvoll in Skripten |
-v | Zeigt alle Zeilen an, die das Muster nicht enthalten |
-w | Das Suchmuster muss ein einzelnes Wort sein (also kein Bestandteil eines anderen Wortes) |
-A [n] | Zeigt »n« Zeilen an, die der Zeile mit dem Muster folgen |
-B [n] | Zeigt »n« Zeilen an, die vor der Zeile mit dem Muster liegen |
--color=auto | Hebt das gesuchte Muster farblich hervor |
esta tablita me la tome de:
http://www.prontosystems.org/tux/grep
Crear una script condicional usando grep:
#!/bin/bash
# Script que comprueba la existencia de un Driver
# en conjuncion con Munki se puede usar para instalar el mismo si no esta
if kextstat | grep -q "com.asix.driver.ax88179-178a";
then
# Driver vorhanden
touch /Users/Shared/found_kesing_driv.txt
exit 1
else
# Driver existiert NIX
touch /Users/Shared/NOT-found_kesing_driv.txt
exit 0
fi
si deseamos que el script funcione a la inversa entonces agregamos ! despues de if
la "q" sirve para que grep no nos devuelva las lineas donde encontró algo. Ideal para Scripts.
No hay comentarios:
Publicar un comentario