← Terminal y Línea de Comandos en Linux Bloque 6 · Filtrar y transformar texto · Tema 27 de 43

Tema 27

Buscar texto con grep

Un registro del sistema tiene cien mil líneas, y solo importan las doce que mencionan un error. Un proyecto tiene quinientos archivos, y hay que saber en cuáles se usa cierta palabra. La herramienta para las dos tareas es la misma, y es probablemente el filtro más usado de Unix: grep lee líneas y deja pasar solo las que contienen lo que se busca. Lo empleamos varias veces de pasada; ahora lo estudiamos con sus opciones, que son las que lo vuelven preciso.

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 como filtro de filas: entran cuatro líneas, dos de las cuales contienen la palabra Rosario; grep Rosario deja pasar solo esas dos Luis, Rosario, teclado Marta, Mendoza, monitor Ana, Salta, mouse Luis, Rosario, cable grep Rosario Luis, Rosario, teclado Luis, Rosario, cable
Las líneas pasan enteras o no pasan. 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

anatomía de un comando grep
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:

terminal
$ 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ó.

El patrón, entre comillas

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.

ReglaConsecuenciaSe 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:

terminal
$ 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ónNombreEfecto
-iignore caseNo distingue mayúsculas de minúsculas.
-vinvertMuestra las líneas que no coinciden.
-nline numberAntepone a cada línea su número dentro del archivo.
-ccountEn lugar de las líneas, muestra cuántas son.
-wwordEl patrón debe coincidir con una palabra completa.
terminal
$ 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 #:

terminal
$ 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.

terminal
$ 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:

terminal
$ 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.txtCoincide con
grep panToda línea que contenga «pan»: también «panadería» o «empanada».
grep -w panLas que contengan «pan» como palabra.
grep -x panSolo 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.

terminal
$ 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 escribeCuenta
grep -c patrón archivoLas líneas que contienen el patrón.
grep patrón archivo | wc -lLo mismo, por otro camino.
grep -vc patrón archivoLas líneas que no lo contienen.
grep -o patrón archivo | wc -lLas 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:

terminal
$ 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ónMuestra
-lSolo los nombres de los archivos que contienen el patrón.
-LLos nombres de los que no lo contienen.
-cCada archivo, con su cantidad de líneas coincidentes.
-hLas líneas, sin el nombre del archivo.
-HLas líneas con el nombre, aunque el archivo sea uno solo.
terminal
$ 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:

terminal
$ 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:

terminal
$ 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ónEfecto
-rBusca en todos los archivos del directorio y de sus subdirectorios.
-RLo 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=.gitSin entrar en los directorios con ese nombre.
-IIgnorando los archivos binarios.
-sSin mensajes sobre archivos que no existen o no se pueden leer.
terminal (la salida depende del sistema)
$ 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…HerramientaEjemplo
Su nombre, tamaño, fecha o dueñofindfind . -name '*.csv'
Su contenidogrep -rgrep -rl Rosario .
Las dos cosasLas dos, combinadasfind . -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ónNombreAgrega
-A 3afterLas 3 líneas posteriores a cada coincidencia.
-B 3beforeLas 3 líneas anteriores.
-C 3context3 antes y 3 después.
terminal
$ 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:

FormaEjemplo
Repetir -e, una por patróngrep -e Salta -e Mendoza ventas.csv
Una alternativa, con -E y la barra verticalgrep -E 'Salta|Mendoza' ventas.csv
Los patrones en un archivo, uno por línea, con -fgrep -f ciudades.txt ventas.csv
terminal
$ 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:

terminal
$ 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 Bgrep -e A -e B
A y Bgrep A | grep B
A pero no Bgrep A | grep -v B
Ni A ni Bgrep -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»:

terminal
$ 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 especialCó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.

terminal
$ 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íaResponde 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:

terminal
$ 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ódigoSignifica
0Se encontró al menos una línea.
1No se encontró ninguna. No es un error: es una respuesta.
2Hubo un error: el archivo no existe, no se puede leer, o el patrón está mal escrito.
terminal
$ 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 textogrep 'texto' archivo
Lo mismo, sin importar mayúsculasgrep -i 'texto' archivo
Saber en qué línea estágrep -n 'texto' archivo
Saber cuántas líneas lo contienengrep -c 'texto' archivo
Un archivo de configuración sin comentarios ni líneas vacíasgrep -v -e '^#' -e '^$' archivo
Saber en qué archivos de un proyecto aparecegrep -rl 'texto' .
Verlo en todo el proyecto, con archivo y líneagrep -rn 'texto' .
Un error de un registro, con lo que pasó antes y despuésgrep -C 5 'error' registro.log
Seguir un registro mostrando solo lo que interesatail -f registro.log | grep 'error'
Buscar un texto con puntos u otros signosgrep -F '192.168.1.1' archivo
Saber si está, sin mostrar nadagrep -q 'texto' archivo

Alrededor de grep hay una familia de herramientas emparentadas, que conviene reconocer:

ComandoQué es
egrep, fgrepNombres antiguos de grep -E y grep -F. Están en desuso; aparecen en scripts viejos.
zgrepgrep sobre archivos comprimidos .gz, como los registros rotados de /var/log.
pgrepBusca procesos por nombre. Tema 32.
rg (ripgrep), agBuscadores 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

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

  1. Con ventas.csv: muestra las ventas de Marta; cuenta las de monitores; muestra con número de línea las de Mendoza.
  2. ¿Cuántas ventas no son de mouse? ¿Y cuántas no son ni de mouse ni de cable?
  3. Busca 45 y 320, con y sin -w. ¿Cambia algún resultado? Busca luego 1 con -w y explica qué líneas aparecen.
  4. Combina grep con 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.
  5. En informe.txt, cuenta las líneas que mencionan tcp y las que mencionan udp. Muestra con dos líneas de contexto la que contiene https.
  6. 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?
  7. Averigua con grep -c cuántas cuentas de /etc/passwd tienen nologin, y con grep -v cuáles no.
  8. Busca de manera recursiva en /etc los archivos que contienen el nombre de tu equipo, con grep -rl y descartando los errores de permisos.
  9. Busca en /usr/share/doc, solo en los archivos cuyo nombre empieza con README, la palabra license sin distinguir mayúsculas, mostrando solo los nombres de los archivos y los diez primeros.
  10. Con grep -q y 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é.