#1 Le 22/07/2016, à 11:21
- Swiss_Knight
☑ [grep] Expressions régulières sur le nom de fichiers
Salut,
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.
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+
:D
De la bonne manière de poser les questions - Trouver de l'aide grâce au Groupe des Parrains Linux - Le Pacte des Gnous
PCs sous Debian Stable & Debian Sid.
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
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 :
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