1. Un filtro de filas
En el tema 26 vimos filtros que ordenan filas y recortan columnas, y señalamos lo que les faltaba: elegir filas por su contenido. Es lo que hace grep.
grep lee su entrada línea por línea y escribe en su salida solo las líneas que coinciden con un patrón. Las demás las descarta.
grep no las modifica ni las reordena.El nombre tiene una historia que explica lo que hace. En el antiguo editor ed, antecesor de vi, la orden g/re/p significaba: en todo el archivo (global), buscar una expresión regular (regular expression) e imprimir (print) las líneas que coincidieran. Era tan usada que se convirtió en un programa aparte, que conservó las iniciales.
El «patrón» puede ser una palabra o una expresión mucho más elaborada. En este tema usamos sobre todo texto simple, y estudiamos lo que grep hace alrededor de la búsqueda. El lenguaje de los patrones, las expresiones regulares, es el tema 28.
2. La forma básica
grep -i "rosario" ventas.csv
│ │ │
│ │ └─ dónde buscar: uno o más archivos
│ └─ qué buscar: el patrón
└─ opciones
El orden es fijo: primero el patrón, después los archivos. Si no se indica ningún archivo, grep lee de su entrada, como todo filtro. Trabajamos en el directorio de práctica, con el archivo de ventas del tema anterior:
$ cd ~/practica
$ grep Rosario ventas.csv
2026-10-01,Luis,Rosario,teclado,2,90
2026-10-02,Luis,Rosario,cable,10,40
2026-10-03,Marta,Rosario,teclado,1,45
2026-10-05,Ana,Rosario,cable,4,16
2026-10-06,Luis,Rosario,monitor,1,320
De las diez líneas pasaron cinco. En la terminal, la parte de cada línea que coincide aparece resaltada en color: es efecto del alias grep --color=auto que vimos en el tema 5, y resulta muy útil para comprobar qué coincidió.
Una palabra sola funciona sin comillas. En cuanto el patrón tiene un espacio, un asterisco, un signo $ o cualquier otro carácter que la shell interpreta, hay que protegerlo, como aprendimos en el tema 9. La costumbre que evita sorpresas es escribirlo siempre entre comillas simples; o dobles, cuando deba contener una variable.
3. Qué cuenta como coincidencia
Tres reglas definen el comportamiento por defecto. Cada una tiene una opción que la cambia, y cada una produce errores cuando se la olvida.
| Regla | Consecuencia | Se cambia con |
|---|---|---|
| El patrón puede estar en cualquier parte de la línea, incluso dentro de una palabra. | grep la encuentra «Llamar» y «plantas». | -w, -x |
| Se distinguen mayúsculas de minúsculas. | grep rosario no encuentra «Rosario». | -i |
| Se muestra la línea completa, no solo lo que coincide. | Una búsqueda devuelve filas, no fragmentos. | -o |
La primera es la que más sorprende. Supón que quieres las ventas de diez unidades:
$ grep -c 10 ventas.csv # -c: contar las líneas que coinciden
10
$ grep ',10,' ventas.csv
2026-10-02,Luis,Rosario,cable,10,40
La primera búsqueda coincidió con las diez líneas del archivo: todas contienen «10», porque todas las fechas son de octubre. grep no sabe nada de columnas; busca una secuencia de caracteres, esté donde esté. La segunda búsqueda incluye las comas que rodean al campo, y con eso deja de coincidir con las fechas.
Es la lección central del tema: un patrón demasiado corto coincide con más de lo que se quería. Hay que mirar el resultado, y afinar el patrón con el contexto que distingue lo buscado. Las herramientas para hacerlo con exactitud son las anclas del tema 28 y los campos de awk del tema 30.
4. Las opciones de todos los días
| Opción | Nombre | Efecto |
|---|---|---|
-i | ignore case | No distingue mayúsculas de minúsculas. |
-v | invert | Muestra las líneas que no coinciden. |
-n | line number | Antepone a cada línea su número dentro del archivo. |
-c | count | En lugar de las líneas, muestra cuántas son. |
-w | word | El patrón debe coincidir con una palabra completa. |
$ grep rosario ventas.csv # nada: la mayúscula importa
$ grep -ic rosario ventas.csv # sin distinguir, y contando
5
$ grep -n mouse ventas.csv # con el número de línea
3:2026-10-02,Ana,Salta,mouse,5,75
7:2026-10-05,Luis,Salta,mouse,3,45
9:2026-10-06,Marta,Mendoza,mouse,2,30
$ grep -v Rosario ventas.csv # todo lo que NO es de Rosario
2026-10-01,Marta,Mendoza,monitor,1,320
2026-10-02,Ana,Salta,mouse,5,75
2026-10-03,Ana,Mendoza,monitor,2,640
2026-10-05,Luis,Salta,mouse,3,45
2026-10-06,Marta,Mendoza,mouse,2,30
Las opciones se combinan, como en la segunda línea. -n es la compañera habitual de un editor: los mensajes de error y los propios editores trabajan con números de línea, y con nano +7 archivo o vim +7 archivo se va directo al lugar.
-v vale tanto como la búsqueda directa. Muchas veces es más fácil describir lo que sobra que lo que se quiere. El uso clásico es leer un archivo de configuración sin sus comentarios. En informe.txt, nuestra copia de /etc/services, las líneas de comentario empiezan con #:
$ grep -c '' informe.txt # el patrón vacío coincide con todas las líneas
361
$ grep -vc '^#' informe.txt # las que no empiezan con #
350
El acento circunflejo del segundo patrón es un adelanto del tema siguiente: significa «al comienzo de la línea». Sin él se descartarían también las líneas que tienen un comentario al final.
5. Palabras y líneas completas
La opción -w resuelve buena parte del problema de las coincidencias de más. Exige que lo encontrado sea una palabra entera: que no tenga, pegado delante o detrás, una letra, un dígito o un guion bajo.
$ grep la tareas.txt # «la», en cualquier parte
Llamar a Luis
Pagar la luz
Regar las plantas
$ grep -w la tareas.txt # «la», como palabra
Pagar la luz
Con números funciona igual, porque los dígitos cuentan como caracteres de palabra y las comas no:
$ grep 40 ventas.csv
2026-10-02,Luis,Rosario,cable,10,40
2026-10-03,Ana,Mendoza,monitor,2,640
$ grep -w 40 ventas.csv
2026-10-02,Luis,Rosario,cable,10,40
Sin -w, el importe 640 se coló en una búsqueda de 40. Hay una opción todavía más estricta, -x, que exige que el patrón coincida con la línea entera:
Comando, sobre tareas.txt | Coincide con |
|---|---|
grep pan | Toda línea que contenga «pan»: también «panadería» o «empanada». |
grep -w pan | Las que contengan «pan» como palabra. |
grep -x pan | Solo una línea que diga exactamente «pan», y nada más. |
grep -x 'Comprar pan' | La línea «Comprar pan». |
-x sirve para comprobar si un valor exacto figura en una lista: un nombre de usuario, una dirección, un identificador, uno por línea.
6. Contar: líneas o apariciones
La opción -c cuenta líneas que coinciden. Si el patrón aparece tres veces en una misma línea, esa línea cuenta una vez. Cuando lo que se quiere son apariciones, hace falta otra opción:
Con -o, de only matching, grep escribe solo la parte de la línea que coincide con el patrón, y cada coincidencia en un renglón aparte.
$ grep -c a tareas.txt # líneas que contienen una «a»
5
$ grep -o a tareas.txt | wc -l # cuántas «a» hay
13
| Se escribe | Cuenta |
|---|---|
grep -c patrón archivo | Las líneas que contienen el patrón. |
grep patrón archivo | wc -l | Lo mismo, por otro camino. |
grep -vc patrón archivo | Las líneas que no lo contienen. |
grep -o patrón archivo | wc -l | Las apariciones del patrón. |
Con un patrón de texto fijo, -o parece trivial: escribe una y otra vez lo mismo. Su valor aparece con las expresiones regulares, donde el patrón describe una forma —«una fecha», «una dirección de correo»— y -o extrae del texto cada cosa que tiene esa forma.
Otra opción de la misma familia es -m, seguida de un número: detiene la búsqueda al llegar a esa cantidad de líneas. grep -m 1 entrega la primera coincidencia y deja de leer, lo que en un archivo enorme ahorra mucho tiempo.
7. Buscar en varios archivos
Cuando se le dan varios archivos, grep antepone a cada línea el nombre del archivo del que salió, separado por dos puntos:
$ grep Luis tareas.txt ventas.csv
tareas.txt:Llamar a Luis
ventas.csv:2026-10-01,Luis,Rosario,teclado,2,90
ventas.csv:2026-10-02,Luis,Rosario,cable,10,40
ventas.csv:2026-10-05,Luis,Salta,mouse,3,45
ventas.csv:2026-10-06,Luis,Rosario,monitor,1,320
Lo habitual es dar los archivos con un comodín, que la shell expande. Varias opciones ajustan lo que se muestra:
| Opción | Muestra |
|---|---|
-l | Solo los nombres de los archivos que contienen el patrón. |
-L | Los nombres de los que no lo contienen. |
-c | Cada archivo, con su cantidad de líneas coincidentes. |
-h | Las líneas, sin el nombre del archivo. |
-H | Las líneas con el nombre, aunque el archivo sea uno solo. |
$ grep -l Luis *.txt *.csv # ¿en qué archivos aparece?
tareas.txt
ventas.csv
$ grep -c Luis *.txt *.csv # ¿cuántas veces en cada uno?
informe.txt:0
notas.txt:0
tareas.txt:1
ventas.csv:4
-l es la opción para responder «¿dónde está?» en lugar de «¿qué dice?». Su salida, una lista de nombres, es además la entrada natural de otros comandos: con xargs, del tema 24, se puede abrir, copiar o procesar exactamente los archivos que mencionan algo.
Si entre los argumentos hay un directorio, como ocurre al usar un asterisco solo, grep avisa que no puede leerlo como archivo y continúa:
$ grep -l Luis *
grep: fotos: Is a directory
tareas.txt
ventas.csv
8. Buscar en un árbol de directorios
Para que grep entre en los directorios y revise todo lo que contienen está la opción -r, de recursive. Convierte a grep en un buscador de contenido para proyectos enteros:
$ grep -rn Luis .
./tareas.txt:2:Llamar a Luis
./ventas.csv:1:2026-10-01,Luis,Rosario,teclado,2,90
./ventas.csv:4:2026-10-02,Luis,Rosario,cable,10,40
./ventas.csv:7:2026-10-05,Luis,Salta,mouse,3,45
./ventas.csv:10:2026-10-06,Luis,Rosario,monitor,1,320
Cada resultado tiene tres partes separadas por dos puntos: la ruta del archivo, el número de línea y la línea. grep -rn patrón . es una de las líneas que más escribe un programador: «¿dónde se usa esto, en todo el proyecto?».
| Opción | Efecto |
|---|---|
-r | Busca en todos los archivos del directorio y de sus subdirectorios. |
-R | Lo mismo, siguiendo además los enlaces simbólicos. |
--include='*.conf' | Solo en los archivos cuyo nombre coincide. |
--exclude='*.log' | Salteando los archivos cuyo nombre coincide. |
--exclude-dir=.git | Sin entrar en los directorios con ese nombre. |
-I | Ignorando los archivos binarios. |
-s | Sin mensajes sobre archivos que no existen o no se pueden leer. |
$ grep -rlw ana /etc 2>/dev/null # ¿qué archivos de configuración nombran a mi usuario?
/etc/group
/etc/passwd
/etc/subgid
/etc/subuid
Los patrones de --include y --exclude van entre comillas, por la razón que dimos para find -name: deben llegar a grep sin que la shell los expanda. En un proyecto de software, --exclude-dir evita perder tiempo en directorios enormes que no interesan, como los de dependencias o el historial de versiones.
Cuando grep encuentra el patrón dentro de un archivo que no es de texto, no vuelca su contenido: escribe Binary file … matches. Es una protección para la terminal, por lo que vimos en el tema 12.
| Busco archivos por… | Herramienta | Ejemplo |
|---|---|---|
| Su nombre, tamaño, fecha o dueño | find | find . -name '*.csv' |
| Su contenido | grep -r | grep -rl Rosario . |
| Las dos cosas | Las dos, combinadas | find . -name '*.csv' -exec grep -l Rosario {} + |
9. Las líneas de alrededor
En un registro, la línea que menciona un error rara vez alcanza para entenderlo: lo que explica qué pasó suele estar en las líneas anteriores, y lo que ocurrió después, en las siguientes. Tres opciones piden ese contexto:
| Opción | Nombre | Agrega |
|---|---|---|
-A 3 | after | Las 3 líneas posteriores a cada coincidencia. |
-B 3 | before | Las 3 líneas anteriores. |
-C 3 | context | 3 antes y 3 después. |
$ grep -n -C 1 Salta ventas.csv
2-2026-10-01,Marta,Mendoza,monitor,1,320
3:2026-10-02,Ana,Salta,mouse,5,75
4-2026-10-02,Luis,Rosario,cable,10,40
--
6-2026-10-03,Ana,Mendoza,monitor,2,640
7:2026-10-05,Luis,Salta,mouse,3,45
8-2026-10-05,Ana,Rosario,cable,4,16
La salida tiene su propia notación. Las líneas que coinciden llevan dos puntos después del número; las de contexto, un guion. Una línea con dos guiones separa los grupos que no son contiguos en el archivo: aquí, entre la línea 4 y la 6 falta la 5.
Las letras se recuerdan por la palabra inglesa: A de after, B de before, C de context. La combinación grep -B 5 -A 10 permite pedir distinta cantidad a cada lado.
10. Varios patrones
Para buscar líneas que contengan uno u otro de varios textos hay tres escrituras equivalentes:
| Forma | Ejemplo |
|---|---|
Repetir -e, una por patrón | grep -e Salta -e Mendoza ventas.csv |
Una alternativa, con -E y la barra vertical | grep -E 'Salta|Mendoza' ventas.csv |
Los patrones en un archivo, uno por línea, con -f | grep -f ciudades.txt ventas.csv |
$ grep -c -e Salta -e Mendoza ventas.csv
5
$ grep -E 'Salta|Mendoza' ventas.csv | cut -d, -f2,3 | sort -u
Ana,Mendoza
Ana,Salta
Luis,Salta
Marta,Mendoza
La opción -E activa las expresiones regulares extendidas, en las que la barra significa «o»; lo vemos en el tema siguiente. La tercera forma, -f, es la indicada cuando la lista de términos es larga o la produce otro programa.
Para lo contrario, líneas que contengan uno y también otro, no hay una opción: se encadenan dos grep en una tubería. El segundo filtra lo que dejó pasar el primero:
$ grep Luis ventas.csv | grep monitor # Luis Y monitor
2026-10-06,Luis,Rosario,monitor,1,320
$ grep Rosario ventas.csv | grep -v Luis # Rosario, pero NO Luis
2026-10-03,Marta,Rosario,teclado,1,45
2026-10-05,Ana,Rosario,cable,4,16
| Quiero las líneas con… | Se escribe |
|---|---|
| A o B | grep -e A -e B |
| A y B | grep A | grep B |
| A pero no B | grep A | grep -v B |
| Ni A ni B | grep -v -e A -e B |
11. Texto literal y patrones difíciles
Hasta aquí tratamos el patrón como texto. No lo es del todo: grep lo interpreta como una expresión regular, y en ese lenguaje algunos caracteres tienen un significado propio. El más traicionero es el punto, que representa «un carácter cualquiera»:
$ grep '2.90' ventas.csv # el punto coincide con cualquier carácter: aquí, una coma
2026-10-01,Luis,Rosario,teclado,2,90
$ grep -F '2.90' ventas.csv # -F: el patrón es texto literal
$
Se buscaba el número «2.90», que no está en el archivo, y grep encontró «2,90». Buscando una dirección como 192.168.1.1 o un nombre de archivo como notas.txt ocurre lo mismo: los puntos coinciden con cualquier cosa.
La opción -F, de fixed strings, hace que grep tome el patrón como una cadena de caracteres literal, sin interpretar ninguno.
| Caracteres con significado especial | Cómo buscarlos literalmente |
|---|---|
. * [ ] ^ $ \ | Con -F, o anteponiendo una barra invertida a cada uno: '2\.90'. |
Cuando lo que se busca es un texto exacto y contiene signos de puntuación, -F es la opción segura. Es además algo más rápida.
Hay un segundo caso incómodo, que no depende de las expresiones regulares: un patrón que empieza con un guion. grep lo toma por una opción.
$ grep '-10-' ventas.csv
grep: invalid option -- '1'
Usage: grep [OPTION]... PATTERNS [FILE]...
$ grep -c -e '-10-' ventas.csv # -e: «lo que sigue es el patrón»
10
Las comillas no ayudan, porque protegen de la shell y no del propio grep. Sirve -e, que anuncia el patrón, o el doble guion del tema 3, que cierra la lista de opciones: grep -- '-10-' ventas.csv.
12. grep en las tuberías
Tan frecuente como buscar en archivos es usar grep en medio de una tubería, para quedarse con una parte de la salida de otro comando. No hay opciones nuevas: sin archivo, grep filtra lo que le llega.
| Tubería | Responde a |
|---|---|
history | grep tar | ¿Cómo era aquel comando con tar? |
ls /usr/bin | grep zip | ¿Qué programas tienen «zip» en el nombre? |
ls -l /etc | grep '^d' | ¿Cuáles son directorios? Los que empiezan con d. |
id | grep -ow sudo | ¿Estoy en el grupo sudo? |
man ls | grep -n -i sort | ¿Dónde habla el manual de ordenar? |
find . -type f | grep -v '\.txt$' | ¿Qué archivos no terminan en .txt? |
Hay un caso que todos encuentran y que conviene tener visto. Al buscar un proceso en la lista de ps, que estudiamos en el tema 32, aparece una línea de más:
$ ps aux | grep bash
ana 3187 0.0 0.0 11212 5376 pts/0 Ss 19:02 0:00 bash
ana 6140 0.0 0.0 9212 2304 pts/0 S+ 20:41 0:00 grep --color=auto bash
La segunda línea es el propio grep. Cuando ps arma su lista, grep ya está en marcha —en una tubería todos arrancan a la vez— y su línea de comandos contiene la palabra buscada. No hay nada roto. Para buscar procesos existe un comando específico, pgrep, que no tiene este efecto.
Y una advertencia de estilo, que repetimos del tema 24: cat archivo | grep patrón hace lo mismo que grep patrón archivo, con un proceso de más.
13. El código de salida
En el tema 25 usamos grep como una pregunta. Vale la pena fijar sus tres respuestas posibles, porque es de los pocos comandos donde el código 1 no significa que algo anduvo mal:
| Código | Significa |
|---|---|
| 0 | Se encontró al menos una línea. |
| 1 | No se encontró ninguna. No es un error: es una respuesta. |
| 2 | Hubo un error: el archivo no existe, no se puede leer, o el patrón está mal escrito. |
$ grep -q Salta ventas.csv; echo $?
0
$ grep -q Córdoba ventas.csv; echo $?
1
$ grep -q Salta nada.csv; echo $?
grep: nada.csv: No such file or directory
2
$ grep -q Luis tareas.txt && echo "Hay que llamar a Luis"
Hay que llamar a Luis
La opción -q, de quiet, suprime toda salida: grep se limita a responder con su código, y además deja de leer en la primera coincidencia. Es la forma correcta de preguntar «¿está?» desde un script, mejor que redirigir la salida a /dev/null.
La distinción entre 1 y 2 importa en una tubería con pipefail: un grep que no encuentra nada hace «fallar» la tubería, aunque no haber encontrado sea un resultado perfectamente legítimo.
14. Recetas y parientes
| Quiero… | Comando |
|---|---|
| Las líneas que contienen un texto | grep 'texto' archivo |
| Lo mismo, sin importar mayúsculas | grep -i 'texto' archivo |
| Saber en qué línea está | grep -n 'texto' archivo |
| Saber cuántas líneas lo contienen | grep -c 'texto' archivo |
| Un archivo de configuración sin comentarios ni líneas vacías | grep -v -e '^#' -e '^$' archivo |
| Saber en qué archivos de un proyecto aparece | grep -rl 'texto' . |
| Verlo en todo el proyecto, con archivo y línea | grep -rn 'texto' . |
| Un error de un registro, con lo que pasó antes y después | grep -C 5 'error' registro.log |
| Seguir un registro mostrando solo lo que interesa | tail -f registro.log | grep 'error' |
| Buscar un texto con puntos u otros signos | grep -F '192.168.1.1' archivo |
| Saber si está, sin mostrar nada | grep -q 'texto' archivo |
Alrededor de grep hay una familia de herramientas emparentadas, que conviene reconocer:
| Comando | Qué es |
|---|---|
egrep, fgrep | Nombres antiguos de grep -E y grep -F. Están en desuso; aparecen en scripts viejos. |
zgrep | grep sobre archivos comprimidos .gz, como los registros rotados de /var/log. |
pgrep | Busca procesos por nombre. Tema 32. |
rg (ripgrep), ag | Buscadores modernos para código fuente: recursivos por defecto, mucho más rápidos, y omiten solos lo que no interesa. Hay que instalarlos. |
Todo lo de este tema se apoyó en patrones de texto simple, con dos o tres adelantos. El verdadero alcance de grep —y de sed, awk, less, vim y casi cualquier editor— está en poder describir formas: «una línea que empieza con una fecha», «un número de cuatro dígitos», «una palabra que termina en -ción». Ese lenguaje es el tema 28.
15. Resumen
grep patrón archivoescribe las líneas que contienen el patrón. Sin archivo, filtra su entrada.- Por defecto el patrón coincide en cualquier parte de la línea, se distinguen mayúsculas de minúsculas y se muestra la línea completa.
- Un patrón corto coincide con más de lo esperado:
grep 10encuentra también las fechas de octubre. Hay que mirar el resultado y afinar. -iignora mayúsculas;-vinvierte la selección;-nnumera;-ccuenta líneas.-wexige una palabra completa y-x, la línea entera.-omuestra solo lo que coincide, una coincidencia por renglón; conwc -lcuenta apariciones.- Con varios archivos se antepone el nombre a cada línea.
-llista solo los archivos que contienen el patrón. -rbusca en todo un árbol de directorios;--include,--excludey--exclude-dirlo acotan.-A,-By-Cagregan líneas de contexto después, antes y alrededor de cada coincidencia.- Varias
-ebuscan uno u otro patrón. Para exigir dos a la vez se encadenan dosgrep. - El patrón es una expresión regular, donde el punto vale por cualquier carácter.
-Flo trata como texto literal. grepsale con 0 si encontró algo, con 1 si no, y con 2 si hubo un error.-qresponde solo con ese código.
16. Preguntas de repaso
Intenta responder cada una antes de abrir la respuesta.
1. ¿Qué hace grep con las líneas que no contienen el patrón?
Las descarta: no las escribe en su salida. El archivo original no se modifica.
2. ¿Por qué grep 10 ventas.csv muestra todas las líneas del archivo?
Porque el patrón coincide en cualquier parte de la línea, y todas contienen «10» en la fecha. grep no distingue campos.
3. ¿Qué diferencia hay entre grep -c y grep -n?
-c muestra cuántas líneas coinciden, en lugar de las líneas. -n muestra las líneas, cada una con su número dentro del archivo.
4. ¿Qué hace grep -v '^#' archivo?
Muestra las líneas que no empiezan con #: el archivo sin sus líneas de comentario.
5. ¿Qué diferencia hay entre grep sol, grep -w sol y grep -x sol?
El primero coincide con cualquier línea que contenga «sol», también en «solo» o «girasol». El segundo, solo si «sol» es una palabra completa. El tercero, solo si la línea es exactamente «sol».
6. ¿Cómo se cuenta cuántas veces aparece una palabra, y no en cuántas líneas?
Con grep -o palabra archivo | wc -l. -o escribe cada coincidencia en un renglón, y wc -l las cuenta.
7. ¿Qué muestra grep -l error *.log?
Los nombres de los archivos .log que contienen «error», sin las líneas.
8. ¿Qué hace grep -rn 'TODO' .?
Busca «TODO» en todos los archivos del directorio actual y sus subdirectorios, y muestra cada línea con la ruta del archivo y el número de línea.
9. ¿Para qué sirven --include y --exclude-dir?
En una búsqueda recursiva, --include limita la búsqueda a los archivos cuyo nombre coincide con un patrón, y --exclude-dir evita entrar en ciertos directorios.
10. ¿Qué significan -A, -B y -C?
Agregan líneas de contexto: -A las posteriores, -B las anteriores y -C las de ambos lados de cada coincidencia.
11. En la salida de grep -n -C 2, ¿cómo se distinguen las líneas que coinciden de las de contexto?
Las que coinciden llevan dos puntos después del número de línea; las de contexto, un guion. Los grupos no contiguos se separan con una línea de dos guiones.
12. ¿Cómo se buscan las líneas que contienen «error» y también «disco»?
Con dos grep en una tubería: grep error archivo | grep disco.
13. ¿Por qué grep '3.14' archivo puede encontrar «3214»?
Porque el patrón es una expresión regular y el punto coincide con cualquier carácter. Con grep -F '3.14' se busca el texto literal.
14. ¿Qué significan los códigos de salida 0, 1 y 2 de grep?
0, que se encontró al menos una línea; 1, que no se encontró ninguna; 2, que ocurrió un error.
15. En ps aux | grep firefox aparece una línea con el propio grep. ¿Por qué?
Porque los comandos de una tubería arrancan a la vez: cuando ps lista los procesos, grep ya existe, y su línea de comandos contiene la palabra buscada.
Para practicar
- Con
ventas.csv: muestra las ventas de Marta; cuenta las de monitores; muestra con número de línea las de Mendoza. - ¿Cuántas ventas no son de mouse? ¿Y cuántas no son ni de mouse ni de cable?
- Busca
45y320, con y sin-w. ¿Cambia algún resultado? Busca luego1con-wy explica qué líneas aparecen. - Combina
grepcon los filtros del tema 26 para saber cuántas ventas hizo cada vendedor en Rosario, y cuál fue la venta de mayor importe de Luis. - En
informe.txt, cuenta las líneas que mencionantcpy las que mencionanudp. Muestra con dos líneas de contexto la que contienehttps. - Muestra
/etc/adduser.conf, o cualquier archivo de configuración de/etc, sin comentarios ni líneas vacías. ¿Cuántas líneas quedan de las originales? - Averigua con
grep -ccuántas cuentas de/etc/passwdtienennologin, y congrep -vcuáles no. - Busca de manera recursiva en
/etclos archivos que contienen el nombre de tu equipo, congrep -rly descartando los errores de permisos. - Busca en
/usr/share/doc, solo en los archivos cuyo nombre empieza conREADME, la palabralicensesin distinguir mayúsculas, mostrando solo los nombres de los archivos y los diez primeros. - Con
grep -qy los operadores del tema 25, escribe una línea que diga «Hay ventas en Salta» o «No hay ventas en Salta». Pruébala cambiando la ciudad por una que no esté.