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 22/07/2016, à 11:21

Swiss_Knight

☑ [grep] Expressions régulières sur le nom de fichiers

Salut, smile

je dois grep quelque chose dans une série de fichiers et j'aimerais limiter le nom des fichiers à un certain nombre de caractères chiffrés. En l'occurrence 3.
Par exemple, j'ai un dossier qui contient beaucoup de sous-dossiers.

Certains s'appellent :

Sous-Dossier001_001, 
Sous-Dossier001_002, 
Sous-Dossier001_003, 
Sous-Dossier001_004,... 
Sous-Dossier099_099,.... 
Sous-Dossier999_999
D'autres :
Sous-Dossier01_01, 
Sous-Dossier01_02, 
Sous-Dossier01_03,.... 
Sous-Dossier99_99

D'autres :

Sous-Dossier01_001, 
Sous-Dossier01_002, 
Sous-Dossier01_003,.... 

etc

Et d'autres :

Sous-Dossier001_01, 
Sous-Dossier001_02, 
Sous-Dossier001_03,.... 

etc.

Le format est donc Sous-DossierXXX_YYY. Avec n chiffres X et m chiffres Y. Ici 3 chiffres Y et 3 chiffres Y.

( En fait, comme brièvement montré ci-dessus, il y a toutes les combinaisons de séries de n et m chiffres possible n=(1,2,3,4), m=(1,2,3,4). )


J'aimerais aller chercher dans chacun des sous-dossier pour n=m=3, une chaîne de caractère contenue dans un fichier texte avec grep ;

grep -inrv "chaine_de-carateres" Sous-Dossier\d{3}_\d{3}/*.txt

En précisant bien que je ne souhaite faire ça que dans les sous dossiers qui contiennent : 3 chiffres, l'underscore, et encore 3 chiffres après, donc du type Sous-DossierXXX_YYY (3X et 3Y).
L'expression-ci dessus ne fonctionne pas, j'ai un "No such file or directory" en retour. Je ne comprends pas pourquoi, j'en ai essayé plein d'autres sans succès.

Merci beaucoup.
smile

Dernière modification par Swiss_Knight (Le 22/07/2016, à 12:17)


xuniL

Hors ligne

#2 Le 22/07/2016, à 11:30

michel_04

Re : ☑ [grep] Expressions régulières sur le nom de fichiers

Bonjour,

Pour ton message À effacer, mauvaise catégorie., clique sur "Signaler aux modérateurs" pour demander la suppression.

A+

Hors ligne

#3 Le 22/07/2016, à 11:39

Compte anonymisé

Re : ☑ [grep] Expressions régulières sur le nom de fichiers

Si tes dossiers s'appellent que comme ça avec des chiffres et underscore après "Sous-Dossier", on pourrait faire simplement :

for a in Sous-Dossier???_???/*.txt
do grep -inv "chaine_de-carateres" "$a"
done

Dernière modification par Compte anonymisé (Le 22/07/2016, à 12:19)

#4 Le 22/07/2016, à 11:56

Swiss_Knight

Re : ☑ [grep] Expressions régulières sur le nom de fichiers

Merci michel_04; je l'ai fait (je pensais qu'on pouvait effacer ses propres messages sur le forum mais en fait non).

Anonyme68; ça m'a l'air de bien fonctionner après deux essais, merci beaucoup !

Par contre, comme je redirigeais jusqu'à présent comme ceci la sortie de grep dans un unique fichier :

WORKINGDIR=/home/username/travail/
FILE=MonFichierDeSortie.txt;
grep -inrv "chaine_de-carateres" ${WORKINGDIR}Sous-Dossier*_*/*.txt > ${WORKINGDIR}${FILE};

avec la boucle for, ça va me l'effacer à chaque itération.

Edit :
suis-je bête... :

for a in Sous-Dossier???_???/*.txt;
do
  grep -inrv "chaine_de-carateres" ${WORKINGDIR}${a} >> ${WORKINGDIR}${FILE};
done

Dernière modification par Swiss_Knight (Le 22/07/2016, à 12:07)


xuniL

Hors ligne

#5 Le 22/07/2016, à 12:07

erresse

Re : ☑ [grep] Expressions régulières sur le nom de fichiers

Il te faut juste rediriger en ajout avec >> au lieu de >


Plus de 50 ans d'informatique, ça en fait des lignes de commandes en console, mais on n'avait pas le choix...
Excellente raison pour, aujourd'hui qu'on le peut, utiliser au maximum les INTERFACES GRAPHIQUES !
Important : Une fois résolu, pensez à clore votre sujet en ajoutant [Résolu] devant le titre du 1er message, et un bref récapitulatif de la solution à la fin de celui-ci. Merci.

Hors ligne

#6 Le 22/07/2016, à 12:08

Swiss_Knight

Re : ☑ [grep] Expressions régulières sur le nom de fichiers

Yep, je viens de réfléchir un peu en même temps que ton post big_smile


xuniL

Hors ligne

#7 Le 22/07/2016, à 12:24

Compte anonymisé

Re : ☑ [grep] Expressions régulières sur le nom de fichiers

enfaite moi aussi je viens de réfléchir, la boucle est aussi optionnelle.

on peut très bien le faire avec juste grep.

grep -inrv "chaine_de-carateres" ${WORKINGDIR}Sous-Dossier???_???/*.txt > ${WORKINGDIR}${FILE};

devrait avoir le même effet.

#8 Le 22/07/2016, à 12:50

pingouinux

Re : ☑ [grep] Expressions régulières sur le nom de fichiers

Bonjour,
La méthode de Anonyme68 #7 me semble parfaite, mais juste pour info :

Swiss_Knight #4 a écrit :

avec la boucle for, ça va me l'effacer à chaque itération.

Tu aurais pu faire

for a in Sous-Dossier???_???/*.txt;
do
  grep -inrv "chaine_de-carateres" "${WORKINGDIR}${a}";
done >"${WORKINGDIR}${FILE}"

Cela marcherait aussi s'il y avait dans la boucle plusieurs commandes dont tu voulais regrouper les sorties dans le même fichier.
Les " " que j'ai ajoutés ne sont utiles que si les noms de fichiers contiennent des espaces ou autres caractères bizarres.

Dernière modification par pingouinux (Le 22/07/2016, à 12:51)

Hors ligne