#1 Le 24/06/2023, à 22:33
- Arbiel
recherche par grep les fichiers contenant un mot
Bonjour
Je cherche, dans une liste de fichiers, ceux qui contiennent un mot. J'utilise grep et je lui passe la liste des fichiers par un pipe. Je n'obtiens aucun résultat, et je ne vois pas quelle erreur j'ai bien pu faire.
Dans l'exemple commenté ci-dessous, je cherche dans les fichiers de /etc/grub.d ceux qui contiennent le mot submenu
arbiel@arbiel-NK3S-8-S4:~$ cd /etc/grub.d
arbiel@arbiel-NK3S-8-S4:/etc/grub.d$ # je vérifie la liste des fichiers avec un pipe que je veux utiliser avec grep
arbiel@arbiel-NK3S-8-S4:/etc/grub.d$ ls -1 | tr "\n" " " | cat
00_header 05_debian_theme 10_linux 10_linux_zfs 20_linux_xen 20_memtest86+ 30_os-prober 30_uefi-firmware 35_fwupd 40_custom 40_custom.cfg 41_custom README arbiel@arbiel-NK3S-8-S4:/etc/grub.d$ echo
arbiel@arbiel-NK3S-8-S4:/etc/grub.d$ # je cherche en indiquant la liste des fichiers sur la ligne de commande
arbiel@arbiel-NK3S-8-S4:/etc/grub.d$ grep --files-with-matches -e submenu 00_header 05_debian_theme 10_linux 10_linux_zfs 20_linux_xen 20_memtest86+ 30_os-prober 30_uefi-firmware 35_fwupd 40_custom 40_custom.cfg 41_custom README
10_linux
10_linux_zfs
20_linux_xen
30_os-prober
40_custom.cfg
arbiel@arbiel-NK3S-8-S4:/etc/grub.d$ # je cherche en passant la liste des fichiers par un pipe
arbiel@arbiel-NK3S-8-S4:/etc/grub.d$ ls -1 | tr "\n" " " | grep --files-with-matches -e submenu
arbiel@arbiel-NK3S-8-S4:/etc/grub.d$ ls -1 | tr "\n" " " | grep --files-with-matches -e submenu -
arbiel@arbiel-NK3S-8-S4:/etc/grub.d$ ls -1 | tr "\n" " " | grep --files-with-matches -e submenu < /dev/stdin
arbiel@arbiel-NK3S-8-S4:/etc/grub.d$ # je vérifie cette dernière syntaxe avec cat
arbiel@arbiel-NK3S-8-S4:/etc/grub.d$ ls -1 | tr "\n" " " | cat < /dev/stdin
00_header 05_debian_theme 10_linux 10_linux_zfs 20_linux_xen 20_memtest86+ 30_os-prober 30_uefi-firmware 35_fwupd 40_custom 40_custom.cfg 41_custom README arbiel@arbiel-NK3S-8-S4:/etc/grub.d$
Quelqu'un peut-il me dire si je n'ai pas bien compris la syntaxe de grep ou s'il s'agit là d'une erreur de grep ?
Merci d'avance
Arbiel
Arbiel Perlacremaz
LDLC Aurore NK3S-8-S4 Ubuntu 20.04, GNOME 3.36.8
24.04 en cours de tests
Abandon d'azerty au profit de bépo, de google au profit de Lilo et de la messagerie électronique violable au profit de Protonmail, une messagerie chiffrée de poste de travail à poste de travail.
Hors ligne
#2 Le 24/06/2023, à 23:23
- Watael
Re : recherche par grep les fichiers contenant un mot
salut,
d'abord, quand la sortie de ls n'est pas un terminal, ls affiche le résultat en colonne (-1 est donc inutile dans un pipe)
si ce n'était pas le cas, pourquoi demander un affichage en colonne pour le transformer en ligne avec tr ?
ensuite, pourquoi procéder ainsi ?
utilise les globs (correspondance de motifs des chemins) :
$ grep --files-with-match --regexp=submenu /etc/grub.d/*
KISS!*
--
*Keep It Simple Stupid!
Dernière modification par Watael (Le 24/06/2023, à 23:24)
Connected \o/
Welcome to sHell. · eval is evil.
En ligne
#3 Le 25/06/2023, à 05:41
- bruno
Re : recherche par grep les fichiers contenant un mot
Cela me semble bien compliqué ou alors je n'ai rien compris.
Pour toutes les occurrence du motif recherché de manière récursive :
grep -r submenu /etc/grub.d
Si c'est juste pour la liste des fichiers :
grep -rl submenu /etc/grub.d
#4 Le 25/06/2023, à 11:41
- Watael
Re : recherche par grep les fichiers contenant un mot
peut-il y avoir des sous-répertoires sous /etc/grub.d ?
Arbiel veut-il descendre dans ces sous-répertoires ?
Connected \o/
Welcome to sHell. · eval is evil.
En ligne
#5 Le 25/06/2023, à 18:35
- Arbiel
Re : recherche par grep les fichiers contenant un mot
Bonjour
Merci pour vos conseils.
Je n'ai effectivement pas utilisé la meilleure méthode pour la recherche de ce qui m'intéresse dans les fichiers de mon répertoire. J'ai utilisé /etc/grub.d à titre d'exemple, mais je ne recherchais pas spécifiquement submenu dans les fichiers de création de grub.cfg.
Cependant, il n'en reste pas moins que, d'après la page de manuel de grep
SYNOPSIS
grep [OPTION...] PATTERNS [FILE...]
……
DESCRIPTION
…
A FILE of “-” stands for standard input. If no FILE is given,
recursive searches examine the working directory, and nonrecursive
searches read standard input.
la commande
ls -1 | tr "\n" " " | grep --files-with-matches -e submenu -
semble correcte et aurait dû répondre à mon besoin.
J'utilise la formulation
grep -rl <ce_que_je_cherche> <répertoire>
qui fonctionne parfaitement.
Merci encore
Arbiel
Arbiel Perlacremaz
LDLC Aurore NK3S-8-S4 Ubuntu 20.04, GNOME 3.36.8
24.04 en cours de tests
Abandon d'azerty au profit de bépo, de google au profit de Lilo et de la messagerie électronique violable au profit de Protonmail, une messagerie chiffrée de poste de travail à poste de travail.
Hors ligne
#6 Le 25/06/2023, à 19:30
- Watael
Re : recherche par grep les fichiers contenant un mot
si tu passes le résultat de ls à grep, c'est ce résultat qui sera examiné par grep, et pas ce qu'il ne sait pas être des fichiers !
$ ls
loremIpsum
autreFichier
$ ls | grep -l lorem -
(entrée standard)
oui, c'est bien l'entrée standard qui contient le nom du fichier loremIpsum, qui correspond au motif lorem
$ grep -l lorem *
loremIpsum
cette fois, grep a bien examiné le contenu des fichiers, et affiche le(s) nom(s) de celui/ceux qui contien(en)t le motif.
Dernière modification par Watael (Le 25/06/2023, à 19:31)
Connected \o/
Welcome to sHell. · eval is evil.
En ligne
#7 Le 30/06/2023, à 21:39
- Arbiel
Re : recherche par grep les fichiers contenant un mot
Bonsoir Watael
Merci pour ce complément d'information. C'est une explication claire du début de la page de manuel de grep que je n'avais pas lue avec suffisamment d'attention. Elle aussi précise clairement la situation.
Arbiel
Arbiel Perlacremaz
LDLC Aurore NK3S-8-S4 Ubuntu 20.04, GNOME 3.36.8
24.04 en cours de tests
Abandon d'azerty au profit de bépo, de google au profit de Lilo et de la messagerie électronique violable au profit de Protonmail, une messagerie chiffrée de poste de travail à poste de travail.
Hors ligne