Búsqueda en múltiples archivos
En escenarios del mundo real, a menudo necesitas buscar en múltiples archivos. El comando grep hace esto fácil al permitirte especificar múltiples archivos o usar comodines (wildcards).
Creemos algunos archivos más con los que trabajar:
echo "Linux is a free and open-source operating system." > ~/project/grep_lab/os.txt
echo "Unix was developed in the 1970s at Bell Labs." >> ~/project/grep_lab/os.txt
echo "Many modern operating systems are Unix-like." >> ~/project/grep_lab/os.txt
echo "The command line is a text interface for your computer." > ~/project/grep_lab/commands.txt
echo "Basic commands include ls, cd, grep, and find." >> ~/project/grep_lab/commands.txt
echo "Learning Linux commands increases productivity." >> ~/project/grep_lab/commands.txt
Búsqueda en archivos específicos
Para buscar en múltiples archivos, simplemente enuméralos después del patrón:
grep "Linux" ~/project/grep_lab/sample.txt ~/project/grep_lab/os.txt ~/project/grep_lab/commands.txt
La salida incluirá el nombre del archivo antes de cada línea que coincida:
/home/labex/project/grep_lab/sample.txt:Welcome to Linux pattern searching.
/home/labex/project/grep_lab/sample.txt:Learning grep is essential for any Linux user.
/home/labex/project/grep_lab/os.txt:Linux is a free and open-source operating system.
/home/labex/project/grep_lab/commands.txt:Learning Linux commands increases productivity.
Uso de comodines
Puedes usar comodines para buscar en múltiples archivos con nombres similares:
grep "command" ~/project/grep_lab/*.txt
Esto busca "command" en todos los archivos .txt en el directorio grep_lab:
/home/labex/project/grep_lab/commands.txt:The command line is a text interface for your computer.
/home/labex/project/grep_lab/commands.txt:Basic commands include ls, cd, grep, and find.
/home/labex/project/grep_lab/sample.txt:The grep command helps find specific patterns in text files.
Búsqueda recursiva
Para buscar en todos los archivos dentro de un directorio y sus subdirectorios, usa la opción -r:
Creemos un subdirectorio con un archivo:
mkdir -p ~/project/grep_lab/subdir
echo "Linux commands are powerful tools for file management." > ~/project/grep_lab/subdir/tools.txt
Ahora, hagamos una búsqueda recursiva:
grep -r "Linux" ~/project/grep_lab/
Esto buscará "Linux" en todos los archivos dentro del directorio grep_lab y sus subdirectorios.
Mostrar solo nombres de archivos
Si solo quieres ver qué archivos contienen una coincidencia (no las líneas que coinciden en sí), usa la opción -l:
grep -l "Linux" ~/project/grep_lab/*.txt
Esto mostrará solo los nombres de los archivos que contienen coincidencias:
/home/labex/project/grep_lab/commands.txt
/home/labex/project/grep_lab/os.txt
/home/labex/project/grep_lab/sample.txt
Intenta combinar estas técnicas con las opciones que aprendiste en el paso anterior. Por ejemplo, para encontrar todos los archivos que contengan "linux" (sin distinción entre mayúsculas y minúsculas) y solo mostrar sus nombres:
grep -il "linux" ~/project/grep_lab/*.txt