Comprensión del comando grep con ejemplos prácticos para filtrar y mostrar fácilmente el contenido del archivo
GREP
son las siglas de 'Global Regular Expression Print'. Es una utilidad de línea de comandos útil proporcionada por Linux, para buscar la línea de texto que coincide con el patrón proporcionado por el usuario.
grep
toma la entrada del usuario en forma de cadenas o palabras que el usuario desea buscar en un archivo en particular. El comando luego verifica el archivo especificado por el usuario para este patrón y luego devuelve las líneas que coinciden con el patrón proporcionado.
Hace un excelente trabajo al filtrar el contenido de un archivo, lo que facilita nuestra tarea de buscar contenido particular en uno o varios archivos simultáneamente.
En este artículo, repasemos el funcionamiento del grep
comando con algunos ejemplos prácticos en detalle.
Opciones disponibles con grep
comando
Estas son algunas de las opciones fundamentales que utilizará con frecuencia con el grep
comando.
Opción |
Descripción |
-i |
Para una búsqueda que no distingue entre mayúsculas y minúsculas |
-r |
Para buscar recursivamente todos los archivos en el directorio especificado y sus subdirectorios |
-c |
Para mostrar el número total de veces que aparece una cadena |
-v |
Para mostrar las líneas que no coinciden |
-w |
Filtrar por esa palabra en particular usada por separado |
Usando el grep
comando
grep
El comando generalmente se usa con la |
utilidad pipe ( ). Puede implementarse con la tubería de shell cuando desee usarlo con algunos otros comandos de Linux. Aunque, grep
también se puede usar individualmente sin la |
utilidad pipe ( ).
Veamos algunas de las sintaxis básicas del grep
comando con y sin la utilidad de tubería.
Permítanme primero mostrarles el archivo de texto de muestra que usaré para ilustrar el grep
comando.
INDIA IS A BEAUTIFUL COUNTRY OF PEACE LOVING PEOPLE.
india stands on three pillars of legislature, executive and judiciary.
India Is a Beautiful Country Of Peace Loving People.
India cares for the people as it's resource
cartesian coordinates
importance of all th cartesian coordinates.
Following are two empty lines.
use of a bullock cart is a common sight in the village for the agrarian chores.
This is the end of the sample file.
grep
utilizado con la utilidad pipe (|)
grep
El comando se puede implementar junto con otros comandos de Linux utilizando las tuberías de shell. Por ejemplo, usar el cat
comando para mostrar el contenido del archivo pero al mismo tiempo canalizar la salida usando el grep
comando para mostrar solo el contenido que desea ver. Esto quedará más claro cuando analicemos el ejemplo.
Sintaxis :
[command] | grep [string]
Ejemplo :
cat sample.txt | grep legislature
Aquí, he usado el cat
comando para mostrar algunas líneas del archivo 'sample.txt'. Solo se mostrarán aquellas líneas que contengan la palabra "legislatura" e ignoren el resto de las líneas.
Salida :
[email protected]:~/workspace$ cat sample.txt | grep legislature
india stands on three pillars of legislature, executive and judiciary.
[email protected]:~/workspace$
grep
usado sin utilidad de tubería (|)
grep
incluso se puede usar directamente como un comando individual sin usar la |
utilidad pipe ( ).
Sintaxis :
grep [string_to_be_searched] [filename]
Ejemplo :
grep India sample.txt
Salida :
India Is a Beautiful Country Of Peace Loving People.
India cares for the people as it's resource
Por lo tanto, he usado el grep
comando directamente para filtrar las líneas que contienen la cadena 'India' del archivo de texto 'sample.txt'.
Búsqueda que no distingue entre mayúsculas y minúsculas mediante el grep
comando
Linux es muy cauteloso con la distinción entre mayúsculas y minúsculas cuando activamos los comandos en la terminal. Esto requiere que el usuario tenga cuidado con el caso de la cadena puesta en el comando.
Veamos esto con un ejemplo.
grep peace sample.txt
En este caso, no obtendremos una salida ya que no existe una palabra como 'paz' en el archivo de muestra. Tenemos la palabra 'Paz' con una 'P' mayúscula. La palabra es la misma, pero cuando usamos el grep
comando sin ninguna opción, busca la coincidencia exacta en el archivo, sin tener en cuenta los cambios en el caso de la letra.
Para evitar esta ambigüedad, simplemente puede usar la -i
opción que literalmente dice el grep
comando "olvídese del caso en el que puse la cadena y busque todos los patrones coincidentes en el archivo".
Sintaxis:
grep -i [string] [filename]
Ejemplo :
grep -i peace sample.txt
Salida :
INDIA IS A BEAUTIFUL COUNTRY OF PEACE LOVING PEOPLE.
India Is a Beautiful Country Of Peace Loving People.
Todas las líneas coincidentes se muestran independientemente del caso en el que se encuentre la cadena coincidente.
Búsqueda recursiva mediante grep
comando
La -r
opción buscará todos los archivos en un directorio y todos sus subdirectorios que coincidan con el patrón de cadena proporcionado por el usuario en el comando.
Sintaxis :
grep -i -r [string] [file_path]
Ejemplo :
grep -i -r tomcat /home/gaurav/workspace
La cadena aquí es 'tomcat' y se buscará en el espacio de trabajo del directorio. Todos los subdirectorios y archivos en el directorio 'espacio de trabajo' también serán escaneados para que coincidan con el patrón de cadena proporcionado.
Salida :
./context_log.policy:// catalina.policy - Security Policy Permissions for Tomcat 7
./context_log.policy:// Note: If tomcat-juli.jar is in ${catalina.base} and not in ${catalina.home},
./context_log.policy:// grant codeBase "file:${catalina.base}/bin/tomcat-juli.jar" {..}
./context_log.policy:grant codeBase "file:${catalina.home}/bin/tomcat-juli.jar" {
./context_log.policy: permission java.lang.RuntimePermission "accessClassInPackage.org.apache.tomcat.websocket.server";
./context.xml:
./catalina.properties:# - Tomcat Bootstrap JARs
./catalina.properties:# - Tomcat API JARs
./catalina.properties:# - Tomcat JARs
./catalina.properties:# - Common non-Tomcat JARs
./catalina.properties:org.apache.catalina.startup.TldConfig.jarsToSkip=tomcat7-websocket.jar
./catalina.properties:tomcat.util.buf.StringCache.byte.enabled=true
./catalina.properties:#tomcat.util.buf.StringCache.char.enabled=true
./catalina.properties:#tomcat.util.buf.StringCache.trainThreshold=500000
./catalina.properties:#tomcat.util.buf.StringCache.cacheSize=5000
./server.xml: pathname="conf/tomcat-users.xml" />
./server.xml:
./tomcat-users.xml:
./tomcat-users.xml:
./web.xml:
./web.xml:
NOTA : Mientras usamos la -r
opción con el grep
comando, necesitamos proporcionar la ruta del archivo y no el nombre del archivo.
Buscando palabras completas solo con grep
comando
Muchas veces, el caso es que buscará una palabra, pero terminará llenando su terminal con las líneas coincidentes que contienen su palabra coincidente, pero no como una palabra individual. Es posible que vea las líneas que contienen algunas palabras cuya subparte es la cadena que ha ingresado.
¿Confundido con esto? No se preocupe, es mucho más fácil de entender una vez que obtiene el ejemplo.
Ejemplo :
Aquí, quiero buscar una palabra individual 'carrito' y mostrar todas las líneas que coinciden con esta palabra en el archivo 'sample.txt'.
grep -i cart sample.txt
Salida :
Cartesian coordinates
importance of all the Cartesian coordinates.
use of a bullock cart is a common sight in the village for the agrarian chores
The cart went missing as the boy left it loose.
En la salida, puede observar que la palabra 'cartesiano' también contiene la palabra 'carrito' y, por lo tanto, las líneas que contienen la palabra 'cartesiano' también se muestran aunque no queremos que se muestren.
Puede usar la -w
opción con el grep
comando para resolver esta ambigüedad.
Sintaxis :
grep -i -w [string] [filename]
Ejemplo :
grep -i -w cart sample.txt
Salida :
use of a bullock cart is a common sight in the village for the agrarian chores.
The cart went missing as the boy left it loose.
Ahora, cuando haya usado la w
opción - con grep
, obtendrá solo las líneas en las que la palabra 'carrito' se usa como un todo.
Búsqueda invertida con grep
comando
grep
El comando también se puede utilizar de forma inversa. Podemos usar el grep
comando de manera opuesta ocultando las líneas coincidentes y solo mostrando las líneas donde no se encuentra la coincidencia. Puede hacer esto usando la -v
opción con el grep
comando.
Sintaxis :
grep -i -v [string] [filename]
Ejemplo :
grep -i -v resource sample.txt
Salida :
INDIA IS A BEAUTIFUL COUNTRY OF PEACE LOVING PEOPLE.
india stands on three pillars of legislature, executive and judiciary.
India Is a Beautiful Country Of Peace Loving People.
cartesian coordinates
importance of all th cartesian coordinates.
use of a bullock cart is a common sight in the village for the agrarian chores.
This is the end of the sample file.
En la salida, se muestran todas las demás líneas además de la línea que contiene la palabra 'recurso'.
Contando apariciones de cadenas coincidentes
La salida del grep
comando suele ser muy larga si los datos del archivo son extensos. Cuantas más coincidencias, más largas son las salidas del grep
comando. Linux le proporciona una opción en la que puede mostrar el número de apariciones de la coincidencia.
Sintaxis :
grep -i -c [string] [filename]
Ejemplo :
grep -i -c india sample.txt
Salida :
[email protected]:~/workspace$ grep -i -c india sample.txt
4
[email protected]:~/workspace$
Aquí, la salida es un número que es el número de apariciones de la palabra 'India' en el archivo sample.txt.
NOTA : He usado la -i
opción en todos los ejemplos para estar seguro con el problema de la distinción entre mayúsculas y minúsculas. En caso de que esté seguro del caso de la palabra que está buscando, puede omitir la -i
opción con seguridad .
Conclusión
Hemos aprendido los usos fundamentales del grep
comando en los sistemas Linux en este tutorial. También aprendimos a mostrar contenido variado que se adapta mejor a nuestras necesidades y a no abarrotar la terminal con un montón de líneas. grep
El comando seguramente ahorrará tiempo si se usa para escanear grandes conjuntos de datos.