Dominando grep con expresiones regulares: Guía para una búsqueda de texto eficiente

Introducción

Este grepcomando es uno de los más útiles en un entorno de terminal Linux. Su nombre grepsignifica “impresión de expresión regular global”. Esto significa que se puede usar greppara comprobar si la entrada que recibe coincide con un patrón específico. Este programa, aparentemente trivial, es extremadamente potente; su capacidad para ordenar la entrada según reglas complejas lo convierte en un enlace popular en muchas cadenas de comandos.

En este tutorial, explorará las grepopciones del comando y luego profundizará en el uso de expresiones regulares para realizar búsquedas más avanzadas.

Prerrequisitos

Para seguir esta guía, necesitará acceder a un ordenador con sistema operativo Linux. Puede ser un servidor privado virtual al que se haya conectado por SSH o su equipo local. Tenga en cuenta que este tutorial se validó con un servidor Linux con Ubuntu 20.04, pero los ejemplos proporcionados deberían funcionar en cualquier ordenador con cualquier versión de Linux.

Si planea usar un servidor remoto para seguir esta guía, le recomendamos que primero complete nuestra guía de configuración inicial del servidor . Esto le permitirá configurar un entorno de servidor seguro, que incluye un usuario no root con sudoprivilegios y un firewall configurado con UFW, que puede usar para mejorar sus habilidades con Linux.

Uso básico

En este tutorial, utilizarás grepla Licencia Pública General GNU versión 3 para buscar varias palabras y frases.

Si usas Ubuntu, puedes encontrar el archivo en la /usr/share/common-licensescarpeta. Cópialo a tu directorio personal:

cp /usr/share/common-licenses/GPL-3 .

Si estás en otro sistema, usa el curlcomando para descargar una copia:

curl -o GPL-3 https://www.gnu.org/licenses/gpl-3.0.txt

También usarás el archivo de licencia BSD en este tutorial. En Linux, puedes copiarlo a tu directorio personal con el siguiente comando:

cp /usr/share/common-licenses/BSD .

Si está en otro sistema, cree el archivo con el siguiente comando:

cat << 'EOF' > BSD
Copyright (c) The Regents of the University of California.
All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
are met:
1. Redistributions of source code must retain the above copyright
   notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright
   notice, this list of conditions and the following disclaimer in the
   documentation and/or other materials provided with the distribution.
3. Neither the name of the University nor the names of its contributors
   may be used to endorse or promote products derived from this software
   without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
EOF

Ahora que tienes los archivos, puedes empezar a trabajar con grep.

En su forma más básica, se usa greppara buscar patrones literales dentro de un archivo de texto. Esto significa que, si se pasa grepuna palabra a buscar, se imprimirán todas las líneas del archivo que la contengan.

Ejecute el siguiente comando para grepbuscar cada línea que contenga la palabra GNU:

grep "GNU" GPL-3

El primer argumento, GNU, es el patrón que estás buscando, mientras que el segundo argumento, GPL-3, es el archivo de entrada que deseas buscar.

La salida resultante será cada línea que contenga el texto del patrón:

Output                    GNU GENERAL PUBLIC LICENSE
  The GNU General Public License is a free, copyleft license for
the GNU General Public License is intended to guarantee your freedom to
GNU General Public License for most of our software; it applies also to
  Developers that use the GNU GPL protect your rights with two steps:
  "This License" refers to version 3 of the GNU General Public License.
  13. Use with the GNU Affero General Public License.
under version 3 of the GNU Affero General Public License into a single
...
...

En algunos sistemas, el patrón que buscó aparecerá resaltado en la salida.

Opciones comunes

De forma predeterminada, grepbuscará el patrón exacto especificado en el archivo de entrada y devolverá las líneas que encuentre. Sin embargo, puede hacer que este comportamiento sea más útil añadiendo indicadores opcionales a grep.

Si desea grepignorar las mayúsculas y minúsculas de su parámetro de búsqueda y buscar variaciones en mayúsculas y minúsculas, puede especificar la opción -io .--ignore-case

Busque cada instancia de la palabra license(con mayúsculas, minúsculas o mixtas) en el mismo archivo que antes con el siguiente comando:

grep -i "license" GPL-3

Los resultados contienen: LICENSE, license, y License:

Output                    GNU GENERAL PUBLIC LICENSE
 of this license document, but changing it is not allowed.
  The GNU General Public License is a free, copyleft license for
  The licenses for most software and other practical works are designed
the GNU General Public License is intended to guarantee your freedom to
GNU General Public License for most of our software; it applies also to
price.  Our General Public Licenses are designed to make sure that you
(1) assert copyright on the software, and (2) offer you this License
  "This License" refers to version 3 of the GNU General Public License.
  "The Program" refers to any copyrightable work licensed under this
...
...

Si hubiera habido una instancia con LiCeNsE, ésta también se habría devuelto.

Si desea encontrar todas las líneas que no contienen un patrón especificado, puede utilizar la opción -vo --invert-match.

Busque cada línea que no contenga la palabra theen la licencia BSD con el siguiente comando:

grep -v "the" BSD

Recibirás este resultado:

OutputAll rights reserved.

Redistribution and use in source and binary forms, with or without
are met:
    may be used to endorse or promote products derived from this software
    without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
...
...

Como no especificó la opción “ignorar mayúsculas y minúsculas”, los dos últimos elementos se devolvieron como si no tuvieran la palabra the.

Suele ser útil conocer el número de línea donde se producen las coincidencias. Puede hacerlo usando la opción -n“o” --line-number. Repita el ejemplo anterior con esta opción añadida:

grep -vn "the" BSD

Esto devolverá el siguiente texto:

Output2:All rights reserved.
3:
4:Redistribution and use in source and binary forms, with or without
6:are met:
13:   may be used to endorse or promote products derived from this software
14:   without specific prior written permission.
15:
16:THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
17:ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
...
...

Ahora puedes referenciar el número de línea si quieres modificar todas las líneas que no contengan “<sub>” the. Esto resulta especialmente útil al trabajar con código fuente.

Expresiones regulares

En la introducción, aprendiste que grepsignifica “impresión de expresión regular global”. Una “expresión regular” es una cadena de texto que describe un patrón de búsqueda específico.

Distintas aplicaciones y lenguajes de programación implementan expresiones regulares de forma ligeramente distinta. En este tutorial, solo explorarás una pequeña parte de cómo grepse describen sus patrones.

Coincidencias literales

En los ejemplos anteriores de este tutorial, al buscar las palabras GNUy the, en realidad, buscaba expresiones regulares básicas que coincidieran con la cadena exacta de caracteres GNUy the. Los patrones que especifican con precisión los caracteres que se deben buscar se denominan “literales” porque coinciden con el patrón literalmente, carácter por carácter.

Es útil pensar en ellos como si coincidieran con una cadena de caracteres en lugar de una palabra. Esta distinción será más importante a medida que aprendas patrones más complejos.

Todos los caracteres alfabéticos y numéricos (así como algunos otros caracteres) coinciden literalmente a menos que sean modificados por otros mecanismos de expresión.

Partidos de ancla

Los anclajes son caracteres especiales que especifican en qué parte de la línea debe producirse una coincidencia para que sea válida.

Por ejemplo, al usar anclas, puede especificar que solo desea conocer las líneas que coinciden GNUal principio de la línea. Para ello, puede usar el ^ancla antes de la cadena literal.

Ejecute el siguiente comando para buscar en el GPL-3archivo y encontrar líneas donde GNUaparece al principio de una línea:

grep "^GNU" GPL-3

Este comando devolverá las siguientes dos líneas:

OutputGNU General Public License for most of our software; it applies also to
GNU General Public License, you may choose any version ever published

De manera similar, se utiliza el $ancla al final de un patrón para indicar que la coincidencia solo será válida si ocurre al final de una línea.

Este comando coincidirá con cada línea que termine con la palabra anden el GPL-3archivo:

grep "and$" GPL-3

Recibirás este resultado:

Outputthat there is no warranty for this free software.  For both users' and
  The precise terms and conditions for copying, distribution and
  License.  Each licensee is addressed as "you".  "Licensees" and
receive it, in any medium, provided that you conspicuously and
    alternative is allowed only occasionally and noncommercially, and
network may be denied when the modification itself materially and
adversely affects the operation of the network or violates the rules and
provisionally, unless and until the copyright holder explicitly and
receives a license from the original licensors, to run, modify and
make, use, sell, offer for sale, import and otherwise run, modify and

Coincidencia de cualquier personaje

El carácter de punto (.) se utiliza en expresiones regulares para indicar que cualquier carácter individual puede existir en la ubicación especificada.

Por ejemplo, para hacer coincidir cualquier cosa en el GPL-3archivo que tenga dos caracteres y luego la cadena cept, utilizaría el siguiente patrón:

grep "..cept" GPL-3

Este comando devuelve el siguiente resultado:

Outputuse, which is precisely where it is most unacceptable.  Therefore, we
infringement under applicable copyright law, except executing it on a
tells the user that there is no warranty for the work (except to the
License by making exceptions from one or more of its conditions.
form of a separately written license, or stated as exceptions;
  You may not propagate or modify a covered work except as expressly
  9. Acceptance Not Required for Having Copies.
...
...

Esta salida contiene instancias de ” accepty except” y variaciones de ambas palabras. El patrón también habría coincidido z2ceptsi se hubiera encontrado.

Expresiones entre paréntesis

Al colocar un grupo de caracteres entre corchetes ( \[y \]), puede especificar que el carácter en esa posición puede ser cualquier carácter que se encuentre dentro del grupo de corchetes.

Por ejemplo, para encontrar las líneas que contienen tooo two, deberá especificar esas variaciones sucintamente utilizando el siguiente patrón:

grep "t[wo]o" GPL-3

La salida muestra que ambas variaciones existen en el archivo:

Outputyour programs, too.
freedoms that you received.  You must make sure that they, too, receive
  Developers that use the GNU GPL protect your rights with two steps:
a computer network, with no transfer of a copy, is not conveying.
System Libraries, or general-purpose tools or generally available free
    Corresponding Source from a network server at no charge.
...
...

La notación entre corchetes ofrece opciones interesantes. Puedes hacer que el patrón coincida con cualquier carácter excepto los dentro de un corchete, comenzando la lista de caracteres dentro de los corchetes con un ^carácter.

Este ejemplo es como el patrón .ode, pero no coincidirá con el patrón code:

grep "[^c]ode" GPL-3

Aquí está el resultado que recibirás:

Output  1. Source Code.
    model, to give anyone who possesses the object code either (1) a
the only significant mode of use of the product.
notice like this when it starts in an interactive mode:

Observe que en la segunda línea devuelta, se encuentra la palabra code. Esto no se debe a un error de la expresión regular ni de grep. Más bien, esta línea se devolvió porque anteriormente se encontró el patrón mode, presente en la palabra model. La línea se devolvió porque existía una instancia que coincidía con el patrón.

Otra característica útil de los corchetes es que puedes especificar un rango de caracteres en lugar de escribir individualmente cada carácter disponible.

Esto significa que si desea encontrar cada línea que comience con una letra mayúscula, puede utilizar el siguiente patrón:

grep "^[A-Z]" GPL-3

Aquí está el resultado que devuelve esta expresión:

OutputGNU General Public License for most of our software; it applies also to
States should not allow patents to restrict development and use of
License.  Each licensee is addressed as "you".  "Licensees" and
Component, and (b) serves only to enable use of the work with that
Major Component, or to implement a Standard Interface for which an
System Libraries, or general-purpose tools or generally available free
Source.
User Product is transferred to the recipient in perpetuity or for a
...
...

Debido a algunos problemas de clasificación heredados, a menudo es más preciso utilizar clases de caracteres POSIX en lugar de rangos de caracteres como los que acaba de utilizar.

Analizar cada clase de carácter POSIX quedaría fuera del alcance de esta guía, pero un ejemplo que lograría el mismo procedimiento que el ejemplo anterior utiliza la \[:upper:\]clase de carácter dentro de un selector de corchetes:

grep "^[[:upper:]]" GPL-3

La salida será la misma que antes.

Repetir el patrón cero o más veces

Por último, uno de los metacaracteres más utilizados es el asterisco, o *, que significa “repetir el carácter o expresión anterior cero o más veces”.

Para encontrar cada línea en el GPL-3archivo que contiene un paréntesis de apertura y cierre, con solo letras y espacios simples en el medio, use la siguiente expresión:

grep "([A-Za-z ]*)" GPL-3

Obtendrá el siguiente resultado:

Output Copyright (C) 2007 Free Software Foundation, Inc.
distribution (with or without modification), making available to the
than the work as a whole, that (a) is included in the normal form of
Component, and (b) serves only to enable use of the work with that
(if any) on which the executable work runs, or a compiler used to
    (including a physical distribution medium), accompanied by the
    (including a physical distribution medium), accompanied by a
    place (gratis or for a charge), and offer equivalent access to the
...
...

Hasta ahora has utilizado puntos, asteriscos y otros caracteres en tus expresiones, pero a veces necesitas buscar esos caracteres específicamente.

Escapar de metacaracteres

En ocasiones, necesitará buscar un punto literal o un corchete de apertura literal, especialmente al trabajar con código fuente o archivos de configuración. Dado que estos caracteres tienen un significado especial en las expresiones regulares, deberá “escaparlos” para indicar grepque no desea usar su significado especial en este caso.

Para escapar caracteres, utilice el carácter de barra invertida ( \) delante del carácter que normalmente tendría un significado especial.

Por ejemplo, para encontrar cualquier línea que comience con una letra mayúscula y termine con un punto, utilice la siguiente expresión que escapa del punto final para que represente un punto literal en lugar del significado habitual de “cualquier carácter”:

grep "^[A-Z].*\.$" GPL-3

Este es el resultado que verás:

OutputSource.
License by making exceptions from one or more of its conditions.
License would be to refrain entirely from conveying the Program.
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
SUCH DAMAGES.
Also add information on how to contact you by electronic and paper mail.

Ahora veamos otras opciones de expresiones regulares.

Expresiones regulares extendidas

El grepcomando admite un lenguaje de expresiones regulares más extenso al usar la -Ebandera o al llamar al egrepcomando en lugar de grep.

Estas opciones amplían las posibilidades de las expresiones regulares extendidas. Estas expresiones regulares incluyen todos los metacaracteres básicos, además de metacaracteres adicionales para expresar coincidencias más complejas.

Agrupamiento

Una de las capacidades más útiles que ofrecen las expresiones regulares extendidas es la capacidad de agrupar expresiones para manipularlas o referenciarlas como una unidad.

Para agrupar expresiones, enciérrelas entre paréntesis. Si desea usar paréntesis sin usar expresiones regulares extendidas, puede escaparlas con la barra invertida para habilitar esta función. Esto significa que las siguientes tres expresiones son funcionalmente equivalentes:

grep "\(grouping\)" file.txt
grep -E "(grouping)" file.txt
egrep "(grouping)" file.txt

Alternancia

De manera similar a cómo las expresiones entre corchetes pueden especificar diferentes opciones posibles para coincidencias de un solo carácter, la alternancia le permite especificar coincidencias alternativas para cadenas o conjuntos de expresiones.

Para indicar alternancia, utilice el carácter de barra vertical |. Estos se utilizan a menudo en la agrupación entre paréntesis para especificar que una de dos o más posibilidades debe considerarse una coincidencia.

GPLLo siguiente lo encontrará General Public Licenseen el texto:

grep -E "(GPL|General Public License)" GPL-3

El resultado se ve así:

Output  The GNU General Public License is a free, copyleft license for
the GNU General Public License is intended to guarantee your freedom to
GNU General Public License for most of our software; it applies also to
price.  Our General Public Licenses are designed to make sure that you
  Developers that use the GNU GPL protect your rights with two steps:
  For the developers' and authors' protection, the GPL clearly explains
authors' sake, the GPL requires that modified versions be marked as
have designed this version of the GPL to prohibit the practice for those
...
...

La alternancia puede seleccionar entre más de dos opciones agregando opciones adicionales dentro del grupo de selección separadas por |caracteres de barra vertical ( ).

Cuantificadores

Al igual que el *metacarácter que coincidió con el carácter o conjunto de caracteres anterior cero o más veces, hay otros metacaracteres disponibles en expresiones regulares extendidas que especifican la cantidad de ocurrencias.

Para que un carácter coincida cero o una vez, puedes usar el ?carácter. Esto hace que los caracteres o conjuntos de caracteres anteriores sean, en esencia, opcionales.

Los siguientes partidos copyrighty rightponiendo copyen un grupo opcional:

grep -E "(copy)?right" GPL-3

Recibirás este resultado:

Output Copyright (C) 2007 Free Software Foundation, Inc.
  To protect your rights, we need to prevent others from denying you
these rights or asking you to surrender the rights.  Therefore, you have
know their rights.
  Developers that use the GNU GPL protect your rights with two steps:
(1) assert copyright on the software, and (2) offer you this License
  "Copyright" also means copyright-like laws that apply to other kinds of
...

El +carácter coincide con una expresión una o más veces. Es similar al *metacarácter, pero con el +carácter, la expresión debe coincidir al menos una vez.

La siguiente expresión coincide con la cadena freemás uno o más caracteres que no sean espacios en blanco:

grep -E "free[^[:space:]]+" GPL-3

Verás este resultado:

Output  The GNU General Public License is a free, copyleft license for
to take away your freedom to share and change the works.  By contrast,
the GNU General Public License is intended to guarantee your freedom to
  When we speak of free software, we are referring to freedom, not
have the freedom to distribute copies of free software (and charge for
you modify it: responsibilities to respect the freedom of others.
freedomss that you received.  You must make sure that they, too, receive
protecting users' freedom to change the software.  The systematic
of the GPL, as needed to protect the freedom of users.
patents cannot be used to render the program non-free.

Especificación de la repetición de coincidencias

Para especificar el número de veces que se repite una coincidencia, utilice las llaves ( {y }). Estas llaves permiten especificar un número exacto, un rango o un límite superior o inferior para la cantidad de veces que una expresión puede coincidir.

Utilice la siguiente expresión para encontrar todas las líneas del GPL-3archivo que contienen vocales triples:

grep -E "[AEIOUaeiou]{3}" GPL-3

Cada línea devuelta tiene una palabra con tres vocales:

Outputchanged, so that their problems will not be attributed erroneously to
authors of previous versions.
receive it, in any medium, provided that you conspicuously and
give under the previous paragraph, plus a right to possession of the
covered work so as to satisfy simultaneously your obligations under this

Para encontrar cualquier palabra que tenga entre 16 y 20 caracteres, utilice la siguiente expresión:

grep -E "[[:alpha:]]{16,20}" GPL-3

Aquí está el resultado de este comando:

Output    certain responsibilities if you distribute copies of the software, or if
    you modify it: responsibilities to respect the freedom of others.
        c) Prohibiting misrepresentation of the origin of that material, or

Sólo se muestran las líneas que contienen palabras dentro de esa longitud.

Casos de uso práctico

1. Validación de campos CSV

Para validar campos CSV, puede usar grepexpresiones regulares para buscar patrones o formatos específicos. Por ejemplo, para comprobar si todas las líneas de un archivo CSV tienen exactamente 5 campos separados por comas, puede usar el siguiente comando:

grep -E "^[^,]+,[^,]+,[^,]+,[^,]+,[^,]+$" yourfile.csv

Este comando imprimirá solo las líneas que coincidan con el patrón especificado, indicando campos CSV válidos.

2. Filtrar registros por nivel de error (por ejemplo, grep “ERROR” logs.txt)

Filtrar registros por nivel de error es un uso común de grep. Para filtrar registros por líneas que contengan la palabra “ERROR”, puede usar el siguiente comando:

grep "ERROR" logs.txt

Este comando imprimirá todas las líneas logs.txtque contengan la palabra “ERROR”, lo que le permitirá centrarse en los mensajes de error.

3. Búsqueda de funciones específicas en el código fuente

Al buscar en el código fuente, grepse puede usar para encontrar funciones o patrones específicos. Por ejemplo, para encontrar todas las ocurrencias de una función nombrada calculateTotalen un directorio de archivos de código fuente, se puede usar el siguiente comando:

grep -r "calculateTotal" /path/to/source/code/directory

Este comando buscará recursivamente todos los archivos en el directorio especificado e imprimirá las líneas que contienen el nombre de la función.

4. Coincidencia de URL o direcciones de correo electrónico en el texto

Se pueden usar expresiones regulares para buscar coincidencias entre URL o direcciones de correo electrónico en texto. Por ejemplo, para encontrar todas las líneas de un archivo que contienen una URL, puede usar el siguiente comando:

grep -E "https?://[^ ]+" yourfile.txt

Este comando imprimirá todas las líneas que contengan una URL que comience con “http://” o “https://”.

5. Preprocesamiento de PNL: filtrado de líneas con palabras vacías

Las palabras vacías son palabras comunes como “el”, “y”, etc., que no tienen mucho significado en una oración. Para filtrar líneas que contienen palabras vacías, puede usar grepuna lista de palabras vacías. Por ejemplo, para filtrar líneas que contienen las palabras vacías “el”, “y” o “un”, puede usar el siguiente comando:

grep -vE "the|and|a" yourfile.txt

Este comando imprimirá todas las líneas que no contengan ninguna de las palabras vacías especificadas.

6. Detección de entradas casi duplicadas o errores ortográficos

Las expresiones regulares permiten detectar entradas casi duplicadas o errores ortográficos mediante la búsqueda de patrones similares. Por ejemplo, para encontrar líneas que contengan palabras con una sola diferencia de carácter, se puede usar el siguiente comando:

grep -E "(\w)\1" yourfile.txt

Este comando imprimirá todas las líneas que contengan palabras con un solo carácter repetido, lo que indica posibles duplicados o errores ortográficos.

7. Patrones de expresiones regulares para entidades con nombre o frases comunes

Las expresiones regulares permiten encontrar coincidencias entre entidades con nombre o frases comunes en el texto. Por ejemplo, para encontrar todas las líneas que contienen una frase específica como “reconocimiento de entidad con nombre”, se puede usar el siguiente comando:

grep -E "named entity recognition" yourfile.txt

Este comando imprimirá todas las líneas que contengan la frase especificada, lo que le permitirá centrarse en la información relevante.

Errores comunes y depuración

1. Usar operadores de expresiones regulares como *, + o ? sin escaparlos

Al usar operadores de expresiones regulares como *, +, o ?, es fundamental escaparlos correctamente para evitar coincidencias inesperadas. Por ejemplo, si desea que coincida con el carácter literal *, debe escaparlo con una barra invertida ( \*). De igual forma, para que coincida con los caracteres literales +o ?, escápelos con una barra invertida ( \+o \?).

Ejemplo de comando para hacer coincidir un *carácter literal:

grep -E "a\*" yourfile.txt

2. Coincidencia de líneas vacías o líneas con solo espacios en blanco

Para hacer coincidir líneas vacías o líneas con solo espacios en blanco, puede utilizar el siguiente patrón de expresión regular:

grep -E "^\s*$" yourfile.txt

Este patrón coincide con líneas que comienzan ( ^) y terminan ( $) con cualquier carácter de espacio en blanco ( \s*).

3. Tabulaciones (\t) y retornos de carro (\r)

Para hacer coincidir tabulaciones ( \t) o retornos de carro ( \r) en su texto, puede utilizar los siguientes comandos:

# Match lines containing tabs
grep -E "\t" yourfile.txt

# Match lines containing carriage returns
grep -E "\r" yourfile.txt

Tenga en cuenta que en algunos casos, es posible que necesite usar la -Eopción para habilitar patrones de expresiones regulares extendidos, que le permiten usar funciones de expresiones regulares más avanzadas.

Diferencias entre grep, egrep y fgrep

DominioDescripciónCaracterísticasCasos de usoComando de muestra
grepCoincidencia de patrones básicosAdmite expresiones regulares básicasCoincidencia de patrones generalesgrep "pattern" file.txt
egrepCoincidencia de patrones extendidaAdmite expresiones regulares extendidasCoincidencia de patrones complejosegrep "pattern" file.txt
fgrepCoincidencia de patrones fijosSin soporte para expresiones regularesCoincidencia de cadenas fijasfgrep "pattern" file.txt

<$>[noe] Nota: La principal diferencia entre estos comandos es el tipo de coincidencia de patrones que admiten. grepAdmite expresiones regulares básicas, egrepadmite expresiones regulares extendidas y fgrepno admite expresiones regulares en absoluto. <$>

Manejo de patrones multilínea

grepNo es adecuado para gestionar patrones multilínea debido a su naturaleza lineal. Sin embargo, existen herramientas alternativas que pueden gestionar eficazmente estos patrones. awkSon perldos opciones populares para buscar patrones que abarcan varias líneas.

awkEs una potente herramienta de procesamiento de texto que permite encontrar patrones en varias líneas. Permite definir un patrón y realizar acciones en las líneas coincidentes. Por ejemplo, para encontrar líneas que contengan un patrón en varias líneas, se puede usar el siguiente comando:

awk '/pattern/ {print $0}' yourfile.txt

Este comando imprimirá todas las líneas que coincidan con el patrón especificado. Tenga en cuenta que awktambién puede usarse para realizar operaciones más complejas en las líneas coincidentes, como imprimir todo el bloque de texto que coincide con el patrón.

perlEs otra herramienta potente que permite gestionar patrones multilínea. Ofrece una forma más flexible y expresiva de encontrar coincidencias de patrones mediante su motor de expresiones regulares integrado. Por ejemplo, puede usar el siguiente comando para buscar líneas que contengan un patrón en varias líneas:

perl -0777 -ne 'print if /pattern/s' yourfile.txt

Este comando indica perlque se lea el archivo en modo “slurp” ( -0777), lo que permite leerlo completo en memoria de una sola vez. La -neopción especifica que el script debe ejecutarse para cada línea del archivo. La print if /pattern/sinstrucción busca la coincidencia del patrón en varias líneas (gracias al smodificador) e imprime el bloque de texto completo que coincide.

Ambos ofrecen funciones más avanzadas y flexibilidad cuando awkse trata de manejar patrones multilínea, lo que los convierte en alternativas ideales para tales tareas.perlgrep

Preguntas frecuentes

1. ¿Cuál es la diferencia entre grep y egrep?

grepy egrepambos se utilizan para la coincidencia de patrones, pero difieren en el tipo de patrones que admiten. grepadmite expresiones regulares básicas, mientras que egrepadmite expresiones regulares extendidas, que permiten una coincidencia de patrones más avanzada.

2. ¿Puedo usar grep para buscar en varios archivos?

Sí, puedes grepbuscar en varios archivos especificando varios nombres de archivo o usando comodines. Por ejemplo:

grep "pattern" file1.txt file2.txt

o

grep "pattern" *.txt

3. ¿Cómo puedo buscar líneas que no coinciden con un patrón?

Para buscar líneas que no coincidan con un patrón, use la -vopción. Por ejemplo:

grep -v "pattern" yourfile.txt

Esto imprimirá todas las líneas que no contengan el patrón especificado.

4. ¿Cómo incluyo números de línea en la salida de grep?

Para incluir números de línea en grepla salida, utilice la -nopción. Por ejemplo:

grep -n "pattern" yourfile.txt

Esto imprimirá los números de línea junto con las líneas que coincidan con el patrón especificado.

5. ¿Por qué mi expresión regular grep no funciona como se esperaba?

Puede haber varias razones por las que tu grepexpresión regular no funciona como se espera. Aquí tienes algunos problemas comunes que debes revisar:

  • Asegúrese de estar utilizando la sintaxis correcta para su patrón de expresión regular.
  • Asegúrese de estar utilizando las opciones correctas para su grepcomando (por ejemplo, -Epara expresiones regulares extendidas).
  • Comprueba si tu patrón contiene caracteres especiales que es necesario escapar.
  • Verifique que su patrón esté citado correctamente para evitar la interpretación del shell.

6. ¿Cómo puedo buscar un patrón que incluya espacios en blanco o caracteres especiales?

Para buscar un patrón que incluya espacios o caracteres especiales, debe escaparlos correctamente en su patrón de expresión regular. Por ejemplo, para buscar un patrón que incluya espacios, utilice el siguiente comando:

grep "pattern\ with\ whitespace" yourfile.txt

De forma similar, para buscar un patrón que incluya caracteres especiales, escápelos con una barra invertida ( \). Por ejemplo:

grep "pattern\ with\ special\ characters" yourfile.txt

Conclusión

grepEs una herramienta poderosa para encontrar patrones dentro de archivos o en la jerarquía del sistema de archivos. Dominar sus opciones y sintaxis mejorará enormemente su capacidad para trabajar con datos de texto.

Las expresiones regulares son un concepto fundamental en informática, y comprenderlas abre un amplio abanico de posibilidades. Desde la búsqueda y el reemplazo avanzados de texto en editores de texto hasta la validación de datos en lenguajes de programación, las expresiones regulares son una habilidad esencial.

Para mejorar aún más tus habilidades, te recomendamos consultar los siguientes tutoriales:

  • El comando Grep en Linux/Unix
  • Introducción a las expresiones regulares
  • Comandos de Linux
  • Las mejores herramientas de recuperación de datos de Linux

Al explorar estos tutoriales, obtendrá una comprensión más profunda de grep, expresiones regulares y otras herramientas esenciales de Linux, lo que le permitirá abordar una amplia gama de tareas con confianza.

Leave a Reply

Your email address will not be published. Required fields are marked *

Related Post