Recherche dans plusieurs fichiers
Dans les scénarios réels, vous avez souvent besoin de rechercher dans plusieurs fichiers. La commande grep
facilite cela en vous permettant de spécifier plusieurs fichiers ou d'utiliser des caractères génériques (wildcards).
Créons quelques autres fichiers avec lesquels travailler :
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
Recherche dans des fichiers spécifiques
Pour rechercher dans plusieurs fichiers, il suffit de les lister après le motif :
grep "Linux" ~/project/grep_lab/sample.txt ~/project/grep_lab/os.txt ~/project/grep_lab/commands.txt
La sortie inclura le nom du fichier avant chaque ligne correspondante :
/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.
Utilisation de caractères génériques
Vous pouvez utiliser des caractères génériques pour rechercher dans plusieurs fichiers ayant des noms similaires :
grep "command" ~/project/grep_lab/*.txt
Cela recherche "command" dans tous les fichiers .txt
du répertoire 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.
Recherche récursive
Pour rechercher dans tous les fichiers d'un répertoire et de ses sous - répertoires, utilisez l'option -r
:
Créons un sous - répertoire avec un fichier :
mkdir -p ~/project/grep_lab/subdir
echo "Linux commands are powerful tools for file management." > ~/project/grep_lab/subdir/tools.txt
Maintenant, effectuons une recherche récursive :
grep -r "Linux" ~/project/grep_lab/
Cela recherchera "Linux" dans tous les fichiers du répertoire grep_lab
et de ses sous - répertoires.
Affichage uniquement des noms de fichiers
Si vous ne voulez voir que les fichiers qui contiennent une correspondance (et non les lignes correspondantes elles - mêmes), utilisez l'option -l
:
grep -l "Linux" ~/project/grep_lab/*.txt
Cela affichera uniquement les noms de fichiers qui contiennent des correspondances :
/home/labex/project/grep_lab/commands.txt
/home/labex/project/grep_lab/os.txt
/home/labex/project/grep_lab/sample.txt
Essayez de combiner ces techniques avec les options que vous avez apprises à l'étape précédente. Par exemple, pour trouver tous les fichiers contenant "linux" (insensible à la casse) et n'afficher que leurs noms :
grep -il "linux" ~/project/grep_lab/*.txt