Usar GREP con expresiones regulares

Usar GREP con expresiones regulares
Este tutorial describe cómo usar ambos grep (y egrep) to Encuentra texto en archivos, en su forma simple y cuando se combina con expresiones regulares. Contiene varios ejemplos y ejercicios, más soluciones, para que el espectador complete.

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 myfile
xyz
xyzde
exyzd
dexyz
d?gxyz
xxz
xzz
x \ z
x*z
xz
x z
Xyz
Xyyz
xyz
xyyz
xyyyz
xyyyyz

Búsqueda simple

Para encontrar el texto 'XYZ' dentro del archivo, ejecute lo siguiente:

Grep xyz myfile
xyz
xyzde
exyzd
dexyz
d?gxyz

Opción

Opciones comunes utilizadas con el grep El comando incluye:

  • -Encuentro todas las líneas desconsiderado de caso
  • -C contar ¿Cuántas líneas contienen el texto?
  • -N Línea de visualización números de líneas coincidentes
  • -L Muestra solo archivo nombres ese partido
  • -riñonal recursivo búsqueda de subdirectorios
  • -v Encuentra todas las líneas NO que contiene el texto

Por ejemplo:

Grep -i xyz myfile
# Encuentra texto independientemente del caso
xyz
xyzde
exyzd
dexyz
d?gxyz
Xyz
xyz
Grep -ic xyz myfile
# Líneas de recuento con texto
7
grep -in xyz myfile
# Mostrar números de línea
1: xyz
2: Xyzde
3: Exyzd
4: Dexyz
5: D?gxyz
12: xyz
14: xyz

Crear varios archivos

Antes de intentar buscar varios archivos, primero cree varios archivos nuevos:

Echo xyz> myFile1
gato myfile1
xyz
echo -e 'xyz \ nxzz \ nxyz'> myFile2
gato myFile2
xyz
xzz
Xyz
echo -e 'xxx \ nyyy'> myFile3
gato myfile3
xxx
yyy

Buscar varios archivos

Para buscar múltiples archivos utilizando nombres de archivo o un comodín ingrese:

Grep -ic xyz myfile myFile1 myFile2 myFile3
myfile: 7
myFile1: 1
myFile2: 2
myFile3: 0
# coincidir con los nombres de archivo que comienzan con 'my'
Grep -in xyz mi*
myfile: 1: xyz
myfile: 2: xyzde
myfile: 3: exyzd
myfile: 4: dexyz
myfile: 5: D?gxyz
MyFile: 12: xyz
myfile: 14: xyz
myFile1: 1: xyz
myFile2: 1: xyz
myFile2: 3: xyz

Ejercicio I

  1. Primero cuente cuántas líneas hay en el archivo /etc /passwd.
Sugerencia: use wc -l /etc /passwd
  1. Ahora encuentre todas las ocurrencias del texto varilla En el archivo /etc /passwd.
  2. Encuentre cuántas líneas en el archivo contienen el texto
  3. Encuentra cuántas líneas no contienen el texto varilla.
  4. Encuentre la entrada para su inicio de sesión en el /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:

  • permite el uso completo de todas las expresiones regulares
  • puede buscar simultáneamente más de una expresión

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

  1. Muestra el archivo gente y examinar su contenido.
  2. Encuentra todas las líneas que contienen la cadena Herrero en el archivo gente.Sugerencia: use el comando GREP pero recuerde que de forma predeterminada, es sensible.
  3. Cree un nuevo archivo, npeople, que contiene todas las líneas que comienzan con la cadena Personal en el archivo de la gente.Sugerencia: use el comando GREP con>.
  4. Confirme el contenido del archivo npeople enumerando el archivo.
  5. Ahora agregue todas las líneas donde termina el texto con la cadena 500 En el archivo de personas al archivo npeople.Sugerencia: use el comando GREP con >>.
  6. Nuevamente, confirme el contenido del archivo npeople enumerando el archivo.
  7. Encuentre la dirección IP del servidor que se almacena en el archivo /etc/huéspedes.Sugerencia: use el comando GREP con $ (nombre de host)
  8. Usar municipal extraer del /etc/passwd Archivo de líneas de cuenta que contienen LP o el tuyo ID de usuario.

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

  1. Encuentra todas las líneas que contienen los nombres Evans o Maler en el archivo gente.
  2. Encuentra todas las líneas que contienen los nombres Smith, Smyth o Smythe en el archivo gente.
  3. Encuentra todas las líneas que contienen los nombres Brown, Browen o Brón en el archivo gente.Si tienes tiempo:
  4. Encuentra la línea que contiene la cadena (administración), incluyendo los soportes, en el archivo gente.
  5. Encuentre la línea que contiene el personaje * en el archivo People.
  6. Combine 5 y 6 arriba para encontrar ambas expresiones.

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