grep

Usando grep (y egrep) con expresiones regulares

Usando grep (y egrep) con expresiones regulares
Este tutorial describe cómo usar ambos grep (y garza) to buscar 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", lo que significa buscar globalmente una expresión regular determinada e imprimir (mostrar) la salida.

Regular Expresiones

Las utilidades permiten al usuario buscar en archivos de texto 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 buscar texto simple dentro de un archivo o archivos en particular. Para probar los ejemplos, primero cree el archivo de muestra.

Utilice 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 es posible que las comillas dobles no se copien correctamente), los comandos deben escribirse para aprenderlos correctamente.

Antes de probar los ejemplos, vea el archivo de muestra:

$ cat myfile

Búsqueda simple

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

$ grep xyz myfile

Usando colores

Para mostrar colores, use -color (un guión doble) o simplemente cree un alias. Por ejemplo:

$ grep --color xyz miarchivo

o

$ alias grep = 'grep --color'
$ grep xyz myfile

Opciones

Opciones comunes utilizadas con el grep comando incluye:

Por ejemplo:

$ grep -i xyz myfile # buscar texto independientemente del caso
$ grep -ic xyz myfile # contar líneas con texto
$ grep -in xyz myfile # mostrar números de línea

Crear varios archivos

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

$ echo xyz> miarchivo1
$ echo -e "xyz \ nxzz \ nXYZ"> myfile2
$ echo -e "xxx \ nyyy"> miarchivo3
$ cat myfile1
$ cat myfile2
$ cat myfile3

Buscar varios archivos

Para buscar varios archivos usando nombres de archivo o un comodín, ingrese:

$ grep -ic xyz miarchivo miarchivo1 miarchivo2 miarchivo3
$ grep -in xyz mi * 
# coincide con los nombres de archivo que comienzan con 'mi'

Ejercicio I

  1. Primero cuente cuántas líneas hay en el archivo / etc / passwd.
Sugerencia: use wc -l / etc / passwd
  1. Ahora busque todas las apariciones del texto var 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 var.
  4. Busque la entrada para su inicio de sesión en el / etc / passwd

Las soluciones de ejercicio se pueden encontrar al final de este artículo.

Usar expresiones regulares

El comando grep También se puede utilizar con expresiones regulares mediante el uso de uno o más de los once caracteres especiales o símbolos 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 utilidades como grep, empuje y sed. Tenga en cuenta que es posible que las cadenas deban ir entre comillas.

Los caracteres especiales disponibles incluyen:

^ Inicio de una línea
PS Fin de línea
. Cualquier carácter (excepto \ n nueva línea)
* 0 o más de la expresión anterior
\ Anteponer un símbolo, se convierte en un carácter literal

Tenga en cuenta que el *, que se puede utilizar en la línea de comando para coincidir con cualquier número de caracteres, incluido ninguno, es no usado de la misma manera aquí.

También tenga en cuenta el uso de comillas en los siguientes ejemplos.

Ejemplos de

Para encontrar todas las líneas que comienzan con texto usando el carácter ^:

$ grep '^ xyz' miarchivo

Para encontrar todas las líneas que terminan con texto usando el carácter $:

$ grep 'xyz $' myfile

Para buscar líneas que contengan una cadena con caracteres ^ y $:

$ grep '^ xyz $' miarchivo

Para encontrar líneas usando el . para que coincida con cualquier carácter:

$ grep '^ x.z 'myfile

Para buscar líneas usando el * para que coincida con 0 o más de la expresión anterior:

$ grep '^ xy * z' miarchivo

Para encontrar líneas usando .* para que coincida con 0 o más de cualquier carácter:

$ grep '^ x.* z 'mi archivo

Para encontrar líneas usando el \ para escapar del carácter *:

$ grep '^ x \ * z' miarchivo

Para encontrar el uso del carácter \:

$ grep '\\' myfile

Expresión grep - egrep

La grep El comando admite solo un subconjunto de las expresiones regulares disponibles. Sin embargo, el comando garza:

Tenga en cuenta que las expresiones deben ir entre comillas.

Para usar colores, use -color o cree nuevamente un alias:

$ alias egrep = 'egrep --color'

Para buscar más de uno regex la garza el comando se puede escribir en varias líneas. Sin embargo, esto también se puede hacer usando estos caracteres especiales:

| Alternancia, ya sea una u otra
(…) Agrupación lógica de parte de una expresión
$ egrep '(^ raíz | ^ uucp | ^ correo)' / etc / passwd

Esto extrae las líneas que comienzan con root, uucp o mail del archivo, el | símbolo que significa cualquiera de las opciones.

El siguiente comando no funciona, aunque no se muestra ningún mensaje, ya que el básico grep El comando no admite todas las expresiones regulares:

$ grep '(^ raíz | ^ uucp | ^ correo)' / etc / passwd

Sin embargo, en la mayoría de los sistemas Linux, el comando grep -E es lo mismo que usar garza:

$ grep -E '(^ ​​raíz | ^ uucp | ^ correo)' / etc / passwd

Usar filtros

Tubería es el proceso de enviar la salida de un comando como entrada a otro comando y es una de las herramientas de Linux más poderosas disponibles.

Los comandos que aparecen en una canalización a menudo se denominan filtros, ya que en muchos casos examinan o modifican la entrada que se les pasa antes de enviar la secuencia modificada a la salida estándar.

En el siguiente ejemplo, la salida estándar de ls -l se pasa como entrada estándar al grep mando. Salida del grep El comando se pasa luego como entrada al más mando.

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.

Utilice un editor como nano o vim para copiar el texto a continuación en un archivo llamado personas:

Personal J.Smith 25000
Personal E.Smith 25400
Entrenamiento A.Marrón 27500
Entrenamiento C.Browen 23400
(Admin) R.Bron 30500
Goodsout T.Smyth 30000
Personal F.Jones 25000
entrenamiento * C.Evans 25500
Goodsout W.Papa 30400
Planta baja T.Smythe 30500
Personal J.Maler 33000

Ejercicio II

  1. Mostrar el archivo personas 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, por defecto, distingue entre mayúsculas y minúsculas.
  3. Cree un nuevo archivo, npeople, que contenga todas las líneas que comiencen con la cadena Personal en el archivo de personas.Sugerencia: use el comando grep con>.
  4. Confirme el contenido del archivo npeople enumerando el archivo.
  5. Ahora agregue todas las líneas donde el texto termina con la cadena 500 en el archivo personas al archivo n personas.Sugerencia: use el comando grep con >>.
  6. Nuevamente, confirme el contenido del archivo npeople enumerando el archivo.
  7. Busque la dirección IP del servidor que está almacenada en el archivo / etc / hosts.Sugerencia: use el comando grep con $ (nombre de host)
  8. Usar garza para extraer de la / etc / passwd líneas de cuenta de archivo que contienen lp o el tuyo ID de usuario.

Las soluciones de ejercicio se pueden encontrar al final de este artículo.

Expresiones más regulares

Una expresión regular se puede considerar como comodines con esteroides.

Hay once caracteres con significados especiales: los corchetes de apertura y cierre [], la barra invertida \, el signo de intercalación ^, el signo de dólar $, el punto o punto ., la barra vertical o el símbolo de la tubería |, el signo de interrogación ?, el asterisco o la estrella *, el signo más + y el corchete de apertura y cierre . Estos caracteres especiales también se denominan a menudo metacaracteres.

Aquí está el conjunto completo de caracteres especiales:

^ Inicio de una línea
PS Fin de línea
. Cualquier carácter (excepto \ n nueva línea)
* 0 o más de la expresión anterior
| Alternancia, ya sea una u otra
[…] Conjunto explícito de caracteres para coincidir
+ 1 o más de la expresión anterior
? 0 o 1 de la expresión anterior
\ Anteponer un símbolo, se convierte en un carácter literal
Notación cuantificadora explícita
(…) Agrupación lógica de parte de una expresión

La versión predeterminada de grep solo tiene soporte limitado para expresiones regulares. Para que funcionen todos los ejemplos siguientes, utilice garza en su lugar o grep -E.

Para encontrar líneas usando el | para que coincida con cualquiera de las expresiones:

$ egrep 'xxz | xzz' miarchivo

Para encontrar líneas usando | para hacer coincidir cualquiera de las expresiones dentro de una cadena, también use ():

$ egrep '^ x (Yz | yz)' miarchivo

Para buscar líneas usando [] para que coincida con cualquier carácter:

$ egrep '^ x [Yy] z' miarchivo

Para buscar líneas usando [] para NO coincidir con ningún carácter:

$ egrep '^ x [^ Yy] z' miarchivo

Para buscar líneas usando el * para que coincida con 0 o más de la expresión anterior:

$ egrep '^ xy * z' miarchivo

Para buscar líneas usando + para que coincida con 1 o más de la expresión anterior:

$ egrep '^ xy + z' miarchivo

Para encontrar líneas usando el ? para que coincida con 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 Marrón, marrón o Bron en el archivo gente.Si tienes tiempo:
  4. Encuentra la línea que contiene la cadena (administración), incluyendo los corchetes, en el archivo personas.
  5. Busque la línea que contiene el carácter * en el archivo personas.
  6. Combina 5 y 6 arriba para encontrar ambas expresiones.

Más ejemplos

Para encontrar líneas usando . y * para coincidir con cualquier conjunto de caracteres:

$ egrep '^ xy.* z 'mi archivo

Para buscar líneas usando para hacer coincidir N número de caracteres:

$ egrep '^ xy 3 z' miarchivo
$ egrep '^ xy 4 z' miarchivo

Para buscar líneas usando para hacer coincidir N o más veces:

$ egrep '^ xy 3, z' miarchivo

Para buscar líneas usando para hacer coincidir N veces pero no más de M veces:

$ egrep '^ xy 2,3 z' miarchivo

Conclusión

En este tutorial, primero analizamos el uso grep en su forma simple para buscar texto en un archivo o en varios archivos. Luego combinamos el texto a buscar con expresiones regulares simples y luego más complejas usando garza.

Próximos pasos

Espero que haga un buen uso de los conocimientos adquiridos aquí. Probar grep comandos en sus propios datos y recuerde, las expresiones regulares como se describe aquí se pueden utilizar en la misma forma en vi, sed y awk!

Soluciones de ejercicio

Ejercicio I

Primero cuente cuántas líneas hay en el archivo / etc / passwd.
$ wc -l / etc / passwd
Ahora busque todas las apariciones del texto var en el archivo / etc / passwd.
$ grep var / etc / passwd
Encuentre cuántas líneas en el archivo contienen el texto var

grep -c var / etc / passwd

Encuentra cuántas líneas NO contienen el texto var.

grep -cv var / etc / passwd

Busque la entrada para su inicio de sesión en el / etc / passwd expediente
grep kdm / etc / passwd

Ejercicio II

Mostrar el archivo personas y examinar su contenido.
$ gente gato
Encuentra todas las líneas que contienen la cadena Herrero en el archivo personas.
$ grep 'Smith' personas
Crea un archivo nuevo, npersonas, que contiene todas las líneas que comienzan con la cadena Personal en el personas expediente
$ grep '^ Personal' people> npeople
Confirmar el contenido del archivo npersonas enumerando el archivo.
$ gato npersonas
Ahora agregue todas las líneas donde el texto termina con la cadena 500 en el archivo personas al archivo npersonas.
$ grep '500 $' personas >> npersonas
Nuevamente, confirme el contenido del archivo npersonas enumerando el archivo.
$ gato npersonas
Busque la dirección IP del servidor que está almacenada en el archivo / etc / hosts.
$ grep $ (nombre de host) / etc / hosts
Usar garza para extraer de la / etc / passwd líneas de cuenta de archivo que contienen lp o tu 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 personas.
$ egrep 'Evans | Maler' gente
Encuentra todas las líneas que contienen los nombres Herrero, Smyth o Smythe en el archivo personas.
$ egrep 'Sm (i | y) el?' personas
Encuentra todas las líneas que contienen los nombres marrón, Browen o Bron en el archivo gente.
$ egrep 'frente?mi?n 'personas
Encuentra la línea que contiene la cadena (administración), incluyendo los corchetes, en el archivo personas.

$ egrep '\ (Admin \)' personas

Encuentra la línea que contiene el personaje * en el archivo gente.
$ egrep '\ *' personas
Combina 5 y 6 arriba para encontrar ambas expresiones.

$ egrep '\ (Admin \) | \ *' personas


WinMouse le permite personalizar y mejorar el movimiento del puntero del mouse en una PC con Windows
Si desea mejorar las funciones predeterminadas del puntero del mouse, use el software gratuito WinMouse. Agrega más funciones para ayudarlo a aprovech...
El botón de clic izquierdo del mouse no funciona en Windows 10
Si está utilizando un mouse dedicado con su computadora portátil o computadora de escritorio, pero el el botón izquierdo del mouse no funciona en Wind...
El cursor salta o se mueve aleatoriamente mientras escribe en Windows 10
Si descubre que el cursor del mouse salta o se mueve por sí solo, automáticamente, de manera aleatoria mientras escribe en una computadora portátil o ...