Si ya sabes como usar los comandos de búsqueda como el comando find, aquí aprenderás como buscar texto dentro de un archivo con el comando grep.
¿Que´ significa grep?
"Grep" significa Global Regular Expression Print.
El comando grep utiliza regex (Regular Expression) para realizar su búsqueda, si no sabes como armar un regex aquí tienes el Curso de Expresiones Regulares
La sintaxis es sencilla: comando, lo que quieres buscar, archivo:
grep [ExpresiónRegular][archivoDondeBuscar]
En los recursos tienes un archivo llamado "movies.csv"; vamos a buscar palabras dentro de ese archivo:
grep the movies.csv
Cómo usar el comando grep
Ignorar case sensitive (-i)
Puede que queramos buscar la palabra "Action" pero eso dará exclusivamente las coincidencias con la "A" mayúscula. Esto lo podemos ignorar con la opción -i, que buscará independientemente de si la letra "A" es mayúscula o minúscula.
grep -i Action movies.csv
Contar ocurrencias (-c)
Si quieres saber cuántas veces se repite una palabra, usa la opción -c seguida de la palabra que quieres buscar.
grep -c Drama movies.csv
Excluir una expresión (-v)
Para saber cuáles son los resultados que NO coinciden con tu expresión regular, usas la opción -v.
Por ejemplo, si queremos contar todas las películas que no son de drama, escribimos:
grep -cv Drama movies.csv
Limitar la búsqueda (-m)
Para no buscar en todo el archivo, sino las primeras ocurrencias, podemos limitar la búsqueda en líneas con la opción -m seguida del número de líneas que queremos encontrar.
Por ejemplo, si queremos buscar las primeras 10 líneas que concuerden con la palabra "Fan" escribimos:
Sin duda uno de los comandos mas útiles.
Ojala Platzi saque cursos más especializados en cuanto a la terminal y línea de comandos.
¡Estaría genial una escuela de Linux!, ¿no creen?
Muchas gracias, buen hombre, en la clase, se olvidan de los que usamos WSL ....
:(
Con el comando 'grep' podemos ++buscar dentro de:++
Un archivo de texto:
cat file.txt | grep "palabra a buscar"
Varios archivos de texto que se encuentren en un directorio.
grep -r . -e "palabra a buscar" <- Donde "." es el directorio donde empezará a buscar.
Todo el árbol de directorios, que el nombre de los archivos coincidan con la búsqueda.
Standar Output y Standar Error:
ipconfig | grep addr
Y una buena alternativa con otras soluciones similares es AWK (y Sed):
 por ejemplo:
La salida de un: ping 8.8.8.8
PING8.8.8.8(8.8.8.8)56(84) bytes of data.64 bytes from8.8.8.8: icmp_seq=1 ttl=60 time=23.9 ms
64 bytes from8.8.8.8: icmp_seq=2 ttl=60 time=23.8 ms
64 bytes from8.8.8.8: icmp_seq=3 ttl=60 time=23.8 ms
64 bytes from8.8.8.8: icmp_seq=4 ttl=60 time=24.0 ms
Pero si solo quieres imprimir la IP y el tiempo de respuesta, tienes que hacer eso:
ping 8.8.8.8 | awk '{ print $4 $7 }'
8.8.8.8:time=50
Las columnas son separadas por ":".
gracias
Fabuloso :D.
Notas :smile:
Su majestad: grep.
Es uno de los comandos mas útiles, y de los mas potentes dentro de Linux.🤖
Nos permite encontrar coincidencias de una búsqueda dentro de una archivo 🤯.
grep <Expresión regular> <archivo>: El primer parámetro es una expresión regular, y es diferente a las wildcarts; es muy versátil para realizar búsquedas. ¡Hay un curso de eso en Platzi!.
Tenemos varías opciones:
-i para ignorar case-sensitive.
-c cuenta el número de elementos.
-v para hacer búsqueda complementaria, esto es, todos los elementos que no coincidan.
Puedes usar grep junto con otros comandos. Por ejemplo, para filtar los resultados de ls, algo cómo ls -lh | grep > busqueda.txt 🧠
wc <archivo> cuenta el número de palabras. Opciones:
Las expresiones regulares pueden ser útiles en otros contextos, por ejemplo, en otros lenguajes de programación 🐍 que las soporten.
Gracias por el aporte.
te amo
14. Su majestad: grep
Veamos los comandos de clase, recordar que grep usa expresiones regulares (regex):
grep -i the movies.csv : Lo que busca este comando es cualquier línea que contenga la palabra "the", asi sea mayúscula o minúscula.
grep -ci the movies.csv : Lo que hace este comando es encontrar el numero de veces que aparece la palabra "the" dentro del archivo, así sea mayúscula o minúscula.
grep -vi towers movies.csv > sintowers.txt : Lo que hace este comando es buscar todas las lineas que no tienen la palabra towers, y el output ponerlo en un archivo de texto llamado "sintowers".
wc: Cuenta la cantidad de palabras de un archivo.
wc -l: Cuenta la cantidad de lineas de un archivo.
Pero mira que éste comando ++grep -ci the movies.csv++ lo que realmente está haciendo es contar el número de líneas o filas coincidentes. Para saber el número real de veces que aparece la palabra the habría que ejecutar algo como esto:
grep -io the movies.csv | wc -l
-o lo que hace es imprimir cada coincidencia con saltos de línea, siendo así el stdin del conteo de líneas con wc -l.
Buen aporte
Alguien me puede decir como puedo descargar el archivo para trabajar en esta clase dentro de mi Ubuntu? Es que tengo WSL y no se como "meter" ese archivo en mi Ubunto si se descarga en mis archivos de Windows jeje
Al archivo de la clase dale click derecho y "Copiar dirección de enlace"
Ahora en tu WSL escribe:
wget pega-aqui-el-enlace-que-copiaste
Con eso se descarga :D
Gracias por la ayuda RexMaster!!!! Crack de craks B)
Si hicieran un curso con todos los comandos posibles y mas útiles duraría mas de 15 horas jajaja :(
Pero si fuesen bien explicados estaría increíble que lo hicieran. De aquí podrían sacar otro curso como Curso Avanzado de la Terminal y Línea de Comandos ¿No te parece? :D
Saben como meter la base de datos de peliculas a su WSL ?
wget url/file.csv
la URL del archivo la consiguen dando clic derecho sobre el file movies.csv que esta en la descripcion (NOTA: NO del link de google drive sino del file directamente)
Muchas gracias, me sirvió!!
Su majestad grep
Permite encontrar coincidencias en la búsqueda dentro de un archivo de texto, no necesariamente un archivo puede ser incluso la salida de info de la terminal ya que después de todo es texto.
$ grep <palabara a buscar <archivo a buscar> // aquí estoy buscando una coincidencia, y me va a mostrar por pantalla ejemplo: $ grep Towers movies.csv, busco en el archivo movies todas las películas que tengan las palabra towers
$ grep <parametro> <palabara a buscar> <archivo a buscar> // vamos a buscar todas las coincidencias que tengan “the” y que estén en el archivo movies, pero con el parámetro “-i” que nos permite que tanto las palabras que empiecen con mayúscula y minúscula se muestren, ya que con el anterior solo buscaba por defecto los “the” que empezaban con minuscula, ejemplo $ grep -i the movies.csv
$ grep –i the movies.csv | less // nos permite hacer scrol, es decir verlo de manera adecuada o poco a poco.
$ grep -c the movies.csv // si el parámetro lo cambiamos por –c en este caso nos muestra el número de veces que se encuentra una coincidencia y si le agregamos el parámetro “-ci” básicamente mostrara más numero de coincidencias debido a lo ya explicado con -i“
$ grep -v the movies.csv // nos muestra las opciones que no coinciden con “the” si agregamos el parámetro por ejemplo –vic excluirá the pero tanto las coincidencias en mayúscula y minúscula y además las contara.
**Bonus: **El comando wc nos indica varios datos útiles en un archivo entonces si le pasamos el comando al archivo: $ wc movies.csv, nos mostrara lo sigt. 9126 30006 477779 movies.csv, donde 9126 significa las líneas, 30006 cuantos caracteres, 477779 numero de bits y finalmente el nombre del archivo. Este comando tiene varios parametrs también como: -l, -w, -c donde respectivamente nos muestra solo las líneas, caracteres y numero de bits.
Por si alguien necesita descargar directamente el archivo a su instalacion de WSL aqui le dejo el comando :
Les comparto un modulo de expresiones regulares con JavaScript de freeCodeCamp muy bueno para que aprendan lo basico de ellas, de verdad son de una gran utilidad y hacen la diferencia a la hora de trabajar con busquedad de coincidencias en strings.
.
JavaScript Algorithms and Data Structures: Regular Expressions
.
Si saben ingles les recomiendo que lo tomen en ingles, asi practican y aprender dos cosas muy importantes al mismo tiempo, y sino, creo que todo el curso de freeCodeCamp ya esta en español.
Para salir de less y volver a la linea de comandos pulsa la tecla ( q ). No lo olviden.
jajaja me sirvio mucho tu comentario, no me podia salir de eso y tampoco queria cerrar la terminal.
Gracias
Un uso diaro de grep para mi es usarlo con el comando history para buscar algún comando que ejecuté. ejemplo:
$>history | grep "algun texto"
ctrl + r
Les comparto mis apuntes, espero que le sirva. :D
grep
Grep nos permite encontrar coincidencias de una búsqueda dentro de un archivo de texto, de cualquier texto, por ejemplo un standard output.
Grep utiliza expresiones regulares y estás son una herramienta superpoderosa de búsqueda. Se puede usar grep con cualquier lenguaje de programación que tenga soporte para ellas.
Usamos grep para poder filtrar información y errores.
Este comando busca todas las líneas que contengan la expresión regular que estamos buscando.
$ grep[expresion regular a buscar] archivo
Key sensitive
Quiere decir que si importan las mayúsculas y minúsculas, por defecto esto es tomado en cuenta al momento de usar grep.
-i
Le estamos diciendo que ignore el key sensitive
$ grep -i [expresion regular a buscar] archivo
Pipe operator
Ejemplo
$ grep -i the movies.csv |less
Ocurrencias
Pasa saber cuantas ocurrencias de cierta expresión regular hay en un archivo.
-c
Cuenta el número de ocurrencias que hay.
$ grep -c [expresion regular a buscar] archivo
También lo podemos usar con otros argumentos tales como i.
$ grep -ci [expresion regular a buscar] archivo
Líneas que no contengan lo que buscamos
Para buscar las líneas que no tienen la expresión regular que coloquemos usamos el modificador v.
-v
$ grep -vi [expresion regular a buscar] archivo
wc o word count
Nos sirve para contar cuantas palabras tenemos en un archivo.
Cuando usamos este comando tendremos cuatro columnas.
Representa la cantidad de líneas que hay en el archivo.
Representa la cantidad de letras o caracteres que hay en el archivo.
Representa el número de bits.
Representa el nombre del archivo.
wc -l
Nos permite contar el número de líneas.
$ wc -l archivo
#Resultadocolumna1 columna2
Cuando usamos este comando tendremos cuatro columnas.
Representa la cantidad de líneas que hay en el archivo.
Representa el nombre del archivo.
wc -w
Nos va a mostrar la cantidad de palabras.
$ wc -w archivo
#Resultadocolumna1 columna2
Cuando usamos este comando tendremos cuatro columnas.
Representa la cantidad de palabras que hay en el archivo.
Representa el nombre del archivo.
wc -c
Nos va a dar el número de bits.
$ wc -c archivo
#Resultadocolumna1 columna2
Cuando usamos este comando tendremos cuatro columnas.
Representa la cantidad de bits que hay en el archivo.
Representa el nombre del archivo.
Les comparto apuntes del mismo curso pero del 2019
Clase: Utilidades batch y batch avanzadas
Procesamiento por lotes o batch
La idea de estas herramientas es que se le pase toda la información que necesitan al momento de la invocación y luego se obtenga los resultados.
Utilidades batch
cat
Nos muestra el contenido completo de un archivo.
$ cat archivo
head
Nos permite ver las primeras líneas de nuestro archivo.
$ head archivo
Modificador
Podemos usar el modificador -n cantidad de lineas.
$ head -n cantidad-de-lineas archivo
Este modificador nos permite ver las cantidades de líneas que nosotros deseemos.
tail
Es lo inverso de head en vez de mostrar las primeras líneas, este muestra las últimas líneas.
$ tail archivo
También podemos usar el mismo modificador que tenemos en head.
Utilidades batch avanzadas
grep
Esta utilidad permite trabajar con expresiones regulares dentro de un archivo. Va a mostrar las líneas que coincidan con la expresión regular que utilicemos.
$ grep expresión-regular archivo
-i: Con este modificador hacemos que no distinga entre las mayúsculas y minusculas.
$ grep -i expresión-regular archivo
Al colocar comillas y un signo de pesos al final de la expresión regular, estaremos buscando líneas que terminen con la expresión regular que colocamos.
$ grep -i "expresion-regular$" archivo
sed
Es el tratamiento de flujos.
Sed quiere decir que Stream Editor, la idea aquí es trabajar sobre un flujo de texto que puede ser un archivo de texto. Este utiliza mucho las expresiones regulares y lo que puede hacer es reemplazar una expresión por otra, es un caso muy común.
Este comando tiene muchas utilidades, sirve para trabajar con archivos de texto en modo procesamiento por lotes.
El comando sed por sí mismo no modifica al archivo, es como un cambio temporal, pero el archivo original se mantiene como estaba originalmente. Lo que hace sed es modificar el flujo (archivo) creando un nuevo flujo con la modificación.
'$d': Lo que hace es eliminar la última línea.
$ sed'$d' archivo
awk
También sirve para el tratamiento de texto en una forma distinta de como lo hace sed. Este comando sirve para trabajar con textos estructurados como archivos separados por comas, por tabs o por cosas similares.
El shell tiene un lenguaje como si fuese de scripting.
$ awk -F 'limitador''{ print $1 }' archivo
'limitador': Este quiere decir cuál es el limitador que va a separar las columnas del archivo.
'{ print $1 }': Imprime solamente la primera columna de un archivo.
También se puede colocar ciertas condiciones para la ejecución del comando.
En este caso imprime los resultados mientras se cumplan las condiciones dadas.
Clase: Comunicación entre procesos: Qué son y cómo se utilizan los flujos estándar
Esquema de procesamiento de datos
Tenemos los datos que ingresan a un proceso y luego este emite una información a la salida, es como una máquina de juego.
Los canales por lo que ingresan los datos a un proceso y por los que sale la información se conocen como flujos o frames.
Flujos estándar
La terminal conoce de tres flujos:
La entrada estándar.
La salida estándar.
El error estándar.
Es importante diferenciar los dos últimos, ya que quizás queramos que la salida de los errores sea distinta al as de la salida normal o resultado.
Procesamiento de datos
Por defecto esto canales están conectados a los periféricos, la entrada es el teclado y la salida de éxito o error es la pantalla.
Hay situaciones en donde no siempre ingresamos datos desde el teclado, quizás queremos ingresar los datos por un archivo que ya tenemos armado y para esto tenemos que usar un proceso llamado proceso de redirección, vamos a cambiar a la entrada estándar del teclado hacia un archivo.
Proceso de redirección
Para esto vamos a usar el modificador <.
Por ejemplo si quiero mandar una base de datos a mi servidor podemos usar algo como esto.
Ejemplo de la clase
$ mysql -h 127.0.0.1 -u root -p1234 < dump1.sql
Redirección de la salida
Se usa para guardar la entrada del teclado en un archivo en vez que se vea en pantalla.
>: Redireccionamos a la salida o el estándar output.
<: Redireccionamos la entrada o el estándar input.
>>: Agrego el resultado al final del archivo ya existente.
Ejemplo
$ ls> archivo-ver-mas-tarde.txt
Otra forma de redirección es que si no quiero crear un archivo nuevo puedo agregar esa información en un archivo que ya tengo creado.
Tuberías o pipes
La idea de estos es tomar la salida de un proceso y pasársela directamente como entrada al siguiente.
|: Es el símbolo del pipe.
more: Muestra un resultado largo en varias iteraciones, muestra páginas de lo que queremos ver y nos podemos mover línea por línea con enter o toda una página o pantallas con la barra espaciadora.
$ ls -l |more
wc: word count, permite contar cuantos caracteres, palabras o líneas hay en un archivo o en un flujo.
wc -l: Muestra la cantidad de líneas de un archivo o flujo.
$ cat archivo |wc -l
Modo de uso de wc
$ wc -l <fichero> número de líneas
$ wc -c <fichero> número de bytes
$ wc -m <fichero> imprime el número de caracteres
$ wc -L <fichero> imprime la longitud de la línea más larga
$ wc -w <fichero> imprime el número de palabras
Práctica: Tratamiento de texto (Apuntes propio de la clase)
Vamos a estudiar algunos comandos para procesar texto y emitir un resultado. Te recomiendo que no solo te quedes con la lectura, sino que experimentes todo lo que quieras con estos comandos, ya que más adelante los necesitarás para completar los desafíos.
Trabajo fundamental con archivos de texto
En clases anteriores estudiamos cómo crear y organizar nuestras carpetas. Ahora vamos a trabajar archivos que, por supuesto, debemos guardar en estos directorios que previamente creamos.
touch: nos permite crear archivos.
>touch archivo.txt
cat: nos permite visualizar todo el contenido de nuestros archivos.
>cat archivo.txt
head: es muy parecido al comando cat. También nos permite visualizar el contenido de nuestros archivos, pero debemos indicarle cuántas líneas nos debe mostrar. Por defecto nos mostrará las primeras 10.
tail: funciona igual que el comando head, pero al revés. También debemos indicarle cuántas líneas nos debe mostrar, la diferencia es que no las mostrará de abajo hacia arriba. Por defecto nos mostrará las últimas 10.
No solo podemos visualizar nuestros archivos (o parte de nuestros archivos) tal cual como escribimos, también podemos filtrar y cambiar el contenido que podemos ver en los archivos.
Por ejemplo: imagina que tenemos un archivo gigante, con cientos o incluso miles de líneas. Si imprimieramos el contenido de todo el archivo sería muy difícil encontrar el nombre de una persona o elemento específico.
Y se vuelve aún más complicado si necesitamos que las palabras que buscamos cumplan ciertas condiciones, como solo mayúsculas o minúsculas, que la siguiente o anterior palabra cumpla ciertas condiciones, etc.
En estos casos podemos utilizar el comando grep para filtrar las líneas que queremos visualizar utilizando (o no) expresiones regulares:
grep “palabra-clave” archivo_gigante.txt
Si nos da igual si la palabra clave incluye mayúsculas o minúsculas podemos utilizar el flag -i:
grep -i “pAlaBra-cLAvE” archivo_gigante.txt
También podemos verificar si la línea incluye esta palabra clave al final:
grep “palabra-clave$” archivo_gigante.txt
O si la incluye al principio:
grep “^palabra-clave” archivo_gigante.txt
También hay situaciones donde necesitamos modificar un poco la información que obtenemos de un archivo de texto.
Por ejemplo, imagina que nuestro archivo contiene un poema, frase o saludo para responderle a los usuarios de nuestra aplicación. El problema es que cada usuario tiene un nombre diferente.
¡Hola, NOMBRE_USUARIO! Felicitaciones por completartu desafíocon PUNTOS_USUARIO puntos.
No queremos editar este archivo. Solo necesitamos cambiar los caracteres NOMBRE_USUARIO por el verdadero nombre del usuario.
Para esto podemos utilizar el comando sed. Solo debemos indicarle que queremos realizar una sustitución (s/), la palabra que vamos a cambiar (NOMBRE_USUARIO), la nueva palabra que vamos a incluir (Ana) y cerrar con el símbolo /.
>sed ‘s/NOMBRE_USUARIO/Ana/’ archivo-saludo.txt
Ahora imagina que, además del nombre, debemos cambiar también la puntuación que obtuvo el usuario:
Necesito mover, copiar o enviar los archivos que en contenido tengan un id de mensaje.
Ejecuto un:
grep '<MsgId>1000518217</MsgId>' *.xml
Y su resultado es
El nombre del archivo y el resultado del grep.
Para los que utilizamos WSL, una forma muy sencilla de copiar o mover archivos entre Windows y Ubuntu es crear un acceso directo de nuestro /home de linux en windows, utilizando el comando explorer.exe . luego crean el acceso directo de /home y lo colocan en el escritorio de windows.
que tremendo dato amigo,muchas gracias.
No olviden que pueden consular todos los parámetros que tiene cada comando usando man <comando> o si tienen tldr es aún mejor porque te da ejemplos, anotación uno no es mejor que porque sirven para cosas diferentes, más bien se complementan