logo Debian Debian Debian-France Debian-Facile Debian-fr.org Forum-Debian.fr Debian ? Communautés logo inclusivité

Debian-facile

Bienvenue sur Debian-Facile, site d'aide pour les nouveaux utilisateurs de Debian.

Vous n'êtes pas identifié(e).

#1 12-04-2023 15:23:44

Qowenta
Membre
Inscription : 23-01-2023

rechercher plusieurs occurences avec grep

bonjour,

Je connais la commande grep qui cherche une seule occurence(toto)


ls  -l|grep toto
 




1)Que faut-il écrire pour chercher plusieurs occurences(toto et tata)?

2)Que faut-il écrire pour chercher plusieurs occurences(toto et tout ce qui commence par mk)
tout ce qui contient toto:


ls  -l|grep toto
 





tout ce qui commence par mk:


ls -l | grep '^mk'
 





les 2 en même temps?


merci de votre aide

Dernière modification par Qowenta (14-04-2023 22:45:23)

Hors ligne

#2 12-04-2023 15:55:12

saitama-san
Membre
Inscription : 28-07-2019

Re : rechercher plusieurs occurences avec grep

Hors ligne

#3 12-04-2023 16:06:39

choops
Membre
Distrib. : Debian sid
(G)UI : XFCE
Inscription : 07-05-2017

Re : rechercher plusieurs occurences avec grep

ls -l | grep '^mk'


Cette commande te fera toujours un retour vide, `ls -l`te retournant la liste des éléments du dossier dans lequel tu te situes avec un affichage qui démarre par les permissions sur les éléments listés, pas par les noms de fichiers:

  12/04/2023   16:55.30   /home/mobaxterm/test  ls -l
total 0
-rw-r--r--    1 1063701  1049089          0 Apr 12 16:49 ma_tata
-rw-r--r--    1 1063701  1049089          0 Apr 12 16:48 mk01
-rw-r--r--    1 1063701  1049089          0 Apr 12 16:48 mk02
-rw-r--r--    1 1063701  1049089          0 Apr 12 16:48 mk03
-rw-r--r--    1 1063701  1049089          0 Apr 12 16:48 mk04
-rw-r--r--    1 1063701  1049089          0 Apr 12 16:48 mk05
-rw-r--r--    1 1063701  1049089          0 Apr 12 16:49 mon_toto
-rw-r--r--    1 1063701  1049089          0 Apr 12 16:49 mututu
-rw-r--r--    1 1063701  1049089          0 Apr 12 16:49 titotota
-rw-r--r--    1 1063701  1049089          0 Apr 12 16:49 tototata

  12/04/2023   16:55.43   /home/mobaxterm/test  ls -l | grep '^mk'

  12/04/2023   16:55.55   /home/mobaxterm/test 



Pour le résultat que tu cherches, il faudrait passer par un `ls`tout simplement, et je te le combine avec les fichiers contenant "toto" (le grep sur double pattern que tu veux faire):

  12/04/2023   16:55.55   /home/mobaxterm/test  ls | grep -E '^mk|toto'
mk01
mk02
mk03
mk04
mk05
mon_toto
titotota
tototata

  12/04/2023   16:59.14   /home/mobaxterm/test 




Après, si l'objectif c'est de faire ça dans un script qui parcourt les éléments d'un dossier et te liste les fameux "contenant 'toto'" ou "débutant par 'mk'", je ferais plutôt un truc comme ça, sans passer par grep:

#!/usr/bin/env bash

my_path="$(pwd)"

for elt in "$my_path"/*; do
    [[ $(basename "$elt") =~ (^mk|toto) ]] && echo $elt
done


Evidemment, ici, `echo $elt`est à remplacer par l'action que tu as prévu de faire sur tes éléments ainsi isolés

Résultat de l'équivalent tassé sur une ligne:

  12/04/2023   17:17.25   /home/mobaxterm/test  my_path="$(pwd)"; for elt in "$my_path"/*; do [[ $(basename "$elt") =~ (^mk|toto) ]] && echo $elt; done
/home/mobaxterm/test/mk01
/home/mobaxterm/test/mk02
/home/mobaxterm/test/mk03
/home/mobaxterm/test/mk04
/home/mobaxterm/test/mk05
/home/mobaxterm/test/mon_toto
/home/mobaxterm/test/titotota
/home/mobaxterm/test/tototata

  12/04/2023   17:17.35   /home/mobaxterm/test 
 

Dernière modification par choops (12-04-2023 16:18:58)

Hors ligne

#4 12-04-2023 17:09:49

Croutons
Membre
Distrib. : Debian12
Noyau : Linux 6.1.0-13-amd64
(G)UI : Fluxbox(NakeDeb)
Inscription : 16-12-2016

Re : rechercher plusieurs occurences avec grep

Hello

Qowenta a écrit :

Je connais la commande grep qui cherche une seule occurence(toto)


La commande grep cherche pas dans le cas présent elle filtre la sortie
une sortie qui est tronqué a la base puisque toto ne sera pas cherché dans les sous répertoire (a moins d'avoir mis les bonnes options de ls)

c'est un peu de la bidouille , mais parfois c'est vrai que c'est rapide a écrire
mais je pense qu'il faudrait mieux utilisé find

pour une recherche dans le répertoire courant et tout les sous répertoire les fichiers commençant par mk et les fichiers contenant toto

find "$PWD" -type f -name 'mk*' -o -name '*toto*'


voir -iname si on veut les noms avec majuscule ou pas

on peut ajouté l'option -ls

find "$PWD" -type f -name 'mk*' -o -name '*toto*' -ls



ou appliqué une commande sur chaque fichiers trouvé

find "$PWD" -type f -name 'mk*' -o -name '*toto*' -exec stat {} \+



https://debian-facile.org/doc:systeme:f … e-multiple

sinon j'ai plutôt tendance a l'écrire comme ça

ls -lh |egrep '^mk|toto'


edit: quoique selon le man

En outre, les variantes egrep, fgrep et rgrep sont respectivement les mêmes que les programmes grep -E, grep -F et  grep -r.
Ces  variantes  sont  obsolètes  mais  sont  fournies  pour  assurer  la  rétro-compatibilité.



par contre le ^ n'est pas interprété on dirait sa match pas

Dernière modification par Croutons (12-04-2023 17:22:34)


-->les cahiers du debutant<--      WikiDF-->Découvrir les principales commandes Linux<-- 
L' expérience, c'est le nom que chacun donne à ses erreurs. Oscar Wilde

Hors ligne

#5 13-04-2023 07:26:07

choops
Membre
Distrib. : Debian sid
(G)UI : XFCE
Inscription : 07-05-2017

Re : rechercher plusieurs occurences avec grep

Croutons a écrit :

ls -lh |egrep '^mk|toto'


edit: quoique selon le man

En outre, les variantes egrep, fgrep et rgrep sont respectivement les mêmes que les programmes grep -E, grep -F et  grep -r.
Ces  variantes  sont  obsolètes  mais  sont  fournies  pour  assurer  la  rétro-compatibilité.



par contre le ^ n'est pas interprété on dirait sa match pas


C'est exactement ce que je soulignais là: utiliser `ls`plutôt que `ls -l`, ce dernier faisant des retours ne démarrant pas par le nom de fichier, le '^' ne sera pas efficient:

Choops a écrit :

ls -l | grep '^mk'


Cette commande te fera toujours un retour vide, `ls -l`te retournant la liste des éléments du dossier dans lequel tu te situes avec un affichage qui démarre par les permissions sur les éléments listés

Hors ligne

#6 13-04-2023 08:03:56

Croutons
Membre
Distrib. : Debian12
Noyau : Linux 6.1.0-13-amd64
(G)UI : Fluxbox(NakeDeb)
Inscription : 16-12-2016

Re : rechercher plusieurs occurences avec grep

ah oui pas faux , sur le coup je comprenais pas pourquoi mais maintenant que tu le dis c'est évident

-->les cahiers du debutant<--      WikiDF-->Découvrir les principales commandes Linux<-- 
L' expérience, c'est le nom que chacun donne à ses erreurs. Oscar Wilde

Hors ligne

Pied de page des forums