El nombre grep proviene del comando ed (y vim) "g/re/p", que significa buscar a nivel mundial una expresión regular dada e imprimir (pantalla) la salida.
Regular Expresiones
Las utilidades permiten al usuario buscar archivos de texto para líneas que coincidan con una expresión regular (regexp). Una expresión regular es una cadena de búsqueda formada por texto y uno o más de 11 caracteres especiales. Un ejemplo simple es hacer coincidir el inicio de una línea.
Archivo de muestra
La forma básica de grep puede usarse para encontrar texto simple dentro de un archivo o archivos en particular. Para probar los ejemplos, primero cree el archivo de muestra.
Use un editor como Nano o VIM para copiar el texto a continuación en un archivo llamado mi archivo.
xyz
xyzde
exyzd
dexyz
d?gxyz
xxz
xzz
x \ z
x*z
xz
x z
Xyz
Xyyz
xyz
xyyz
xyyyz
xyyyyz
Aunque puede copiar y pegar los ejemplos en el texto (tenga en cuenta que las cotizaciones dobles pueden no copiar correctamente), los comandos deben escribirse para aprenderlos correctamente.
Antes de probar los ejemplos, vea el archivo de muestra:
gato myfilexyz
Búsqueda simple
Para encontrar el texto 'XYZ' dentro del archivo, ejecute lo siguiente:
Grep xyz myfilexyz
Opción
Opciones comunes utilizadas con el grep El comando incluye:
Por ejemplo:
Grep -i xyz myfilexyz
# Encuentra texto independientemente del caso
Grep -ic xyz myfile7
# Líneas de recuento con texto
grep -in xyz myfile1: xyz
# Mostrar números de línea
Crear varios archivos
Antes de intentar buscar varios archivos, primero cree varios archivos nuevos:
Echo xyz> myFile1xyz
gato myfile1
echo -e 'xyz \ nxzz \ nxyz'> myFile2xyz
gato myFile2
echo -e 'xxx \ nyyy'> myFile3xxx
gato myfile3
Buscar varios archivos
Para buscar múltiples archivos utilizando nombres de archivo o un comodín ingrese:
Grep -ic xyz myfile myFile1 myFile2 myFile3myfile: 7
# coincidir con los nombres de archivo que comienzan con 'my'myfile: 1: xyz
Grep -in xyz mi*
Ejercicio I
Sugerencia: use wc -l /etc /passwd
Se pueden encontrar soluciones de ejercicio al final de este artículo.
Usando expresiones regulares
El comando grep También se puede usar con expresiones regulares utilizando uno o más de once caracteres o símbolos especiales para refinar la búsqueda. Una expresión regular es una cadena de caracteres que incluye caracteres especiales para permitir la coincidencia de patrones dentro de los servicios públicos como grep, empuje y sed. Tenga en cuenta que las cadenas pueden necesitar estar encerradas en cotizaciones.
Los caracteres especiales disponibles incluyen:
^ | Comienzo de una línea |
ps | Final de una línea |
. | Cualquier personaje (excepto \ n Newline) |
* | 0 o más de la expresión anterior |
\ | Antes de un símbolo lo convierte en un personaje literal |
Tenga en cuenta que *, que se puede usar en la línea de comando para que coincida con cualquier número de caracteres, incluidos ninguno, es no utilizado de la misma manera aquí.
Observe también el uso de citas en los siguientes ejemplos.
Ejemplos
Para encontrar todas las líneas que comienzan con el texto usando el carácter ^:
Grep '^xyz' myfile
Para encontrar todas las líneas que terminan con texto usando el personaje $:
Grep 'xyz $' myfile
Para encontrar líneas que contengan una cadena usando los caracteres ^ y $:
Grep '^xyz $' myfile
Para encontrar líneas usando el . para que coincida con cualquier personaje:
Grep '^x.z 'myfile
Para encontrar líneas usando * para que coincida con 0 o más de la expresión anterior:
Grep '^xy*z' myfile
Para encontrar líneas usando .* Para que coincida con 0 o más de cualquier personaje:
Grep '^x.*z 'myfile
Para encontrar líneas usando el \ Para escapar del * personaje:
Grep '^x \*z' myfile
Para encontrar el uso de \ carácter:
Grep '\\' myfile
Expresión Grep - Egrep
El grep El comando admite solo un subconjunto de las expresiones regulares disponibles. Sin embargo, el comando egrep:
Tenga en cuenta que las expresiones deben estar encerradas dentro de un par de citas.
Para buscar más de uno regular el municipal El comando puede escribirse en múltiples líneas. Sin embargo, esto también se puede hacer usando estos caracteres especiales:
| | Alternancia, una u otra |
(...) | Agrupación lógica de parte de una expresión |
egrep '(^root |^uucp |^mail)' /etc /passwd
Esto extrae las líneas que comienzan con root, UUCP o correo del archivo, el | símbolo que significa cualquiera de las opciones.
El siguiente comando será no trabajar, aunque no se muestra ningún mensaje, ya que el básico grep El comando no admite todas las expresiones regulares:
Grep '(^root |^uucp |^mail)' /etc /passwd
Sin embargo, en la mayoría de los sistemas de Linux el comando Grep -E es lo mismo que usar municipal:
grep -e '(^root |^uucp |^mail)' /etc /passwd
Uso de filtros
Tubería es el proceso de enviar la salida de un comando como entrada en otro comando y es una de las herramientas de Linux más potentes disponibles.
Los comandos que aparecen en una tubería a menudo se denominan filtros, ya que en muchos casos tamizan o modifican la entrada pasada antes de enviar la secuencia modificada a la salida estándar.
En el siguiente ejemplo, salida estándar de LS -L se pasa como entrada estándar al grep dominio. Salida del grep Luego se pasa el comando como entrada al más dominio.
Esto mostrará solo directorios en /etc:
ls -l /etc | grep '^d' | más
Los siguientes comandos son ejemplos de uso de filtros:
PS -EF | GREP CRON
Quién | Grep KDM
Archivo de muestra
Para probar el ejercicio de revisión, primero cree el siguiente archivo de muestra.
Use un editor como Nano o VIM para copiar el texto a continuación en un archivo llamado gente:
J.Smith 25000
E personal.Smith 25400
Entrenando un.Brown 27500
Capacitación C.Browen 23400
(Administrador) r.Brón 30500
Bienes.Smyth 30000
Personal.Jones 25000
entrenamiento* c.Evans 25500
Bienes w.Papa 30400
Piso de tierra t.Smythe 30500
J.Maler 33000
Ejercicio II
Se pueden encontrar soluciones de ejercicio al final de este artículo.
Expresiones más regulares
Se puede considerar una expresión regular como comodines con esteroides.
Hay once caracteres con significados especiales: los soportes cuadrados de apertura y cierre [], la barra insegura \, el caret ^, el signo de dólar, el período o el punto ., la barra vertical o símbolo de tubería | ?, el asterisco o la estrella *, el signo más y el soporte redondo de apertura y cierre . Estos caracteres especiales también se llaman a menudo metacharacteres.
Aquí está el conjunto completo de caracteres especiales:
^ | Comienzo de una línea |
ps | Final de una línea |
. | Cualquier personaje (excepto \ n Newline) |
* | 0 o más de la expresión anterior |
| | Alternancia, una u otra |
[…] | Conjunto explícito de caracteres para que coincida |
+ | 1 o más de expresión anterior |
? | 0 o 1 de expresión anterior |
\ | Antes de un símbolo lo convierte en un personaje literal |
... | Notación de cuantificador explícito |
(...) | Agrupación lógica de parte de una expresión |
La versión predeterminada de grep solo tiene soporte de expresión regular limitado. Para que todos los siguientes ejemplos funcionen, use municipal en su lugar o Grep -E.
Para encontrar líneas usando el | Para que coincida con cualquier expresión:
egrep 'xxz | xzz' myfile
Para encontrar líneas usando | Para que coincida con cualquier expresión dentro de una cadena también use ()::
egrep '^x (yz | yz)' myfile
Para encontrar líneas que usan [] para que coincida con cualquier carácter:
egrep '^x [yy] z' myfile
Para encontrar líneas que usan [] para no coincidir con ningún carácter:
egrep '^x [^yy] z' myfile
Para encontrar líneas usando * para que coincida con 0 o más de la expresión anterior:
egrep '^xy*z' myfile
Para encontrar líneas usando el + para que coincida con 1 o más de la expresión anterior:
egrep '^xy+z' myfile
Para encontrar líneas usando el ? para que coincidan 0 o 1 de la expresión anterior:
egrep '^xy?z 'myfile
Ejercicio III
Más ejemplos
Para encontrar líneas usando . y * para que coincida con cualquier conjunto de caracteres:
egrep '^xy.*z 'myfile
Para encontrar líneas usando para que coincida con el número de caracteres:
egrep '^xy 3 z' myfile
egrep '^xy 4 z' myfile
Para encontrar líneas usando para que coincida con n o más veces:
egrep '^xy 3, z' myfile
Para encontrar líneas usando para que coincida con n veces pero no más de las veces:
egrep '^xy 2,3 z' myfile
Conclusión
En este tutorial, primero vimos usando grep en su forma simple encontrar texto en un archivo o en múltiples archivos. Luego combinamos el texto para buscar con expresiones regulares simples y luego más complejos que usan municipal.
Próximos pasos
Espero que hagan el conocimiento adquirido aquí en buen uso. Probar grep comandos sobre sus propios datos y recuerde, las expresiones regulares como se describen aquí se pueden usar en la misma forma en VI, sed y asombrar!
Soluciones de ejercicio
Ejercicio I
Primero cuente cuántas líneas hay en el archivo /etc/passwd.
WC -L /ETC /PASSWD
Ahora encuentre todas las ocurrencias del texto varilla En el archivo /etc /passwd.
GREP VAR /ETC /PASSWD
Encuentre cuántas líneas en el archivo contienen el texto varilla
GREP -C var /etc /passwd
Encuentra cuántas líneas no contienen el texto varilla.
GREP -CV VAR /ETC /PASSWD
Encuentre la entrada para su inicio de sesión en el /etc/passwd archivo
GREP KDM /ETC /PASSWD
Ejercicio II
Muestra el archivo gente y examinar su contenido.
gente de gato
Encuentra todas las líneas que contienen la cadena Herrero en el archivo gente.
Grep 'Smith' People
Crea un nuevo archivo, tope, que contiene todas las líneas que comienzan con la cadena Personal en el gente archivo
Grep '^Personal' People> npeople
Confirmar el contenido del archivo tope Enumerando el archivo.
gato npeople
Ahora agregue todas las líneas donde termina el texto con la cadena 500 en el archivo gente al archivo tope.
GREP '500 $' Gente >> npeople
Nuevamente, confirme el contenido del archivo tope Enumerando el archivo.
gato npeople
Encuentre la dirección IP del servidor que se almacena en el archivo /etc/huéspedes.
GREP $ (nombre de host) /etc /hosts
Usar municipal extraer del /etc/passwd Archivo de líneas de cuenta que contienen LP o su propia identificación de usuario.
egrep '(lp | kdm :)' /etc /passwd
Ejercicio III
Encuentra todas las líneas que contienen los nombres Evans o Maler en el archivo gente.
Egrep 'Evans | Maler' People
Encuentra todas las líneas que contienen los nombres Herrero, Smyth o Smythe en el archivo gente.
egrep 'sm (i | y) el?' gente
Encuentra todas las líneas que contienen los nombres Marrón, Browen o Brón en el archivo gente.
ceja?mi?n 'gente
Encuentra la línea que contiene la cadena (administración), incluyendo los soportes, en el archivo gente.
$ egrep '\ (administrador \)'
Encuentra la línea que contiene el personaje * en el archivo gente.
Egrep '\*' gente
Combine 5 y 6 arriba para encontrar ambas expresiones.
egrep '\ (admin \) | \*' personas