Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 24/06/2023, à 23: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
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 25/06/2023, à 00: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 ? smile
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 25/06/2023, à 00:24)


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#3 Le 25/06/2023, à 06: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

En ligne

#4 Le 25/06/2023, à 12: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.

Hors ligne

#5 Le 25/06/2023, à 19: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

man grep a écrit :

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
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, à 20: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, à 20:31)


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#7 Le 30/06/2023, à 22: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
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