Introducción
Este grep
comando es uno de los más útiles en un entorno de terminal Linux. Su nombre grep
significa “impresión de expresión regular global”. Esto significa que se puede usar grep
para 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 grep
opciones 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 sudo
privilegios y un firewall configurado con UFW, que puede usar para mejorar sus habilidades con Linux.
Uso básico
En este tutorial, utilizarás grep
la 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-licenses
carpeta. Cópialo a tu directorio personal:
cp /usr/share/common-licenses/GPL-3 .
Si estás en otro sistema, usa el curl
comando 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 grep
para buscar patrones literales dentro de un archivo de texto. Esto significa que, si se pasa grep
una palabra a buscar, se imprimirán todas las líneas del archivo que la contengan.
Ejecute el siguiente comando para grep
buscar 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, grep
buscará 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 grep
ignorar 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 -i
o .--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 -v
o --invert-match
.
Busque cada línea que no contenga la palabra the
en 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 grep
significa “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 grep
se describen sus patrones.
Coincidencias literales
En los ejemplos anteriores de este tutorial, al buscar las palabras GNU
y the
, en realidad, buscaba expresiones regulares básicas que coincidieran con la cadena exacta de caracteres GNU
y 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 GNU
al 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-3
archivo y encontrar líneas donde GNU
aparece 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 and
en el GPL-3
archivo:
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-3
archivo 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 ” accept
y except
” y variaciones de ambas palabras. El patrón también habría coincidido z2cept
si 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 too
o 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-3
archivo 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 grep
que 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 grep
comando admite un lenguaje de expresiones regulares más extenso al usar la -E
bandera o al llamar al egrep
comando 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.
GPL
Lo siguiente lo encontrará General Public License
en 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 copyright
y right
poniendo copy
en 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 free
má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-3
archivo 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 grep
expresiones 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.txt
que 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, grep
se puede usar para encontrar funciones o patrones específicos. Por ejemplo, para encontrar todas las ocurrencias de una función nombrada calculateTotal
en 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 grep
una 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 -E
opció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
Dominio | Descripción | Características | Casos de uso | Comando de muestra |
---|---|---|---|---|
grep | Coincidencia de patrones básicos | Admite expresiones regulares básicas | Coincidencia de patrones generales | grep "pattern" file.txt |
egrep | Coincidencia de patrones extendida | Admite expresiones regulares extendidas | Coincidencia de patrones complejos | egrep "pattern" file.txt |
fgrep | Coincidencia de patrones fijos | Sin soporte para expresiones regulares | Coincidencia de cadenas fijas | fgrep "pattern" file.txt |
<$>[noe] Nota: La principal diferencia entre estos comandos es el tipo de coincidencia de patrones que admiten. grep
Admite expresiones regulares básicas, egrep
admite expresiones regulares extendidas y fgrep
no admite expresiones regulares en absoluto. <$>
Manejo de patrones multilínea
grep
No es adecuado para gestionar patrones multilínea debido a su naturaleza lineal. Sin embargo, existen herramientas alternativas que pueden gestionar eficazmente estos patrones. awk
Son perl
dos opciones populares para buscar patrones que abarcan varias líneas.
awk
Es 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 awk
tambié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.
perl
Es 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 perl
que se lea el archivo en modo “slurp” ( -0777
), lo que permite leerlo completo en memoria de una sola vez. La -ne
opción especifica que el script debe ejecutarse para cada línea del archivo. La print if /pattern/s
instrucción busca la coincidencia del patrón en varias líneas (gracias al s
modificador) e imprime el bloque de texto completo que coincide.
Ambos ofrecen funciones más avanzadas y flexibilidad cuando awk
se trata de manejar patrones multilínea, lo que los convierte en alternativas ideales para tales tareas.perl
grep
Preguntas frecuentes
1. ¿Cuál es la diferencia entre grep y egrep?
grep
y egrep
ambos se utilizan para la coincidencia de patrones, pero difieren en el tipo de patrones que admiten. grep
admite expresiones regulares básicas, mientras que egrep
admite expresiones regulares extendidas, que permiten una coincidencia de patrones más avanzada.
2. ¿Puedo usar grep para buscar en varios archivos?
Sí, puedes grep
buscar 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 -v
opció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 grep
la salida, utilice la -n
opció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 grep
expresió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
grep
comando (por ejemplo,-E
para 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
grep
Es 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.