#1 Le 19/04/2022, à 20:16
- Sciensous
[Résolu]shell, fichiers et regex pour 0 ou 1 caractère
salut, pas simple de faire un titre explicite alors je détaille
existe-t-il une façon simple de faire un ls ou cat sur un nom générique de dossier avec une incertitude sur un seul caractère ?
exemple: je veux afficher un fichier texte.txt dans un sous dossier dont le nom peut changer à une lettre près, comme zSousdossier ou tSousdossier
ce qui marche :
cat *Sousdossier/texte.txt
mais y-t-il un équivalent au regex \? (0 ou 1 caractère) plutôt que * (tout les caractères) qui est trop vaste ?
Ou je me prends la tête pour rien car le gain entre les 2 serait ridicule !?
merci d'avance pour votre aide
Dernière modification par Sciensous (Le 20/04/2022, à 08:18)
antiX 19 et 21 et Ubuntu 20.04 et 22.04
( sous LXDE et gnome-shell )
Hors ligne
#2 Le 19/04/2022, à 20:24
- kholo
Re : [Résolu]shell, fichiers et regex pour 0 ou 1 caractère
salut...
j'ai contourné la question autrement :
find . -iname texte.txt -exec cat '{}' \;
...
ou
cat ?Sousdossier/texte.txt
Dernière modification par kholo (Le 19/04/2022, à 20:26)
Hors ligne
#3 Le 19/04/2022, à 20:28
- Watael
Re : [Résolu]shell, fichiers et regex pour 0 ou 1 caractère
salut,
le shell ne gère pas les regex dans le contexte général.
le Développement des chemins indique :
? : un caractère unique,
* : n'importe quelle chaîne.
il y a aussi les intervalles, et autres classes entre crochets...
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#4 Le 19/04/2022, à 20:28
- Sciensous
Re : [Résolu]shell, fichiers et regex pour 0 ou 1 caractère
@kholo le rapido: je suis désolé ça ne va pas car en fait c'est dans un script que je vais l'utiliser pour plusieurs pc avec le nom de sousdossier qui peut changer un peu
du genre
var="$(cat ~/*Sousdossier/texte.txt)"
et pour le coup le find est trop "puissant" et trop illisible par rapport au simple cat
@Watael: j'ai bien essayé le ? mais ça remplace un caractère et pas 0 ou 1
je suppose que ce n'est possible à cause de "le shell ne gère pas les regex dans le contexte général."
Du coup je crois que je vais en rester là: ça fonctionne bien avec *Sousdossier mais c'était pour exclure d'éventuels abSousdossier et ne prendre que un seul caractère avec Sousdossier
Dommage mais pour mon script maison ça suffira largement
et puis c'était aussi pour mon apprentissage
(pas facile à avoir ce genre de renseignement bien précis sur le net)
merci quand même Kholo et Watael
Dernière modification par Sciensous (Le 19/04/2022, à 20:49)
antiX 19 et 21 et Ubuntu 20.04 et 22.04
( sous LXDE et gnome-shell )
Hors ligne
#5 Le 19/04/2022, à 20:36
- Watael
Re : [Résolu]shell, fichiers et regex pour 0 ou 1 caractère
c'est possible, avec bash (au moins) avec les Développement de chemins "améliorés" (extglob) :
$ shopt -s extglob
$ ls ?(?)Sousdossier/texte.txt
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#6 Le 19/04/2022, à 20:40
- Sciensous
Re : [Résolu]shell, fichiers et regex pour 0 ou 1 caractère
ok mais c'est trop "complexe" pour mon script basique
antiX 19 et 21 et Ubuntu 20.04 et 22.04
( sous LXDE et gnome-shell )
Hors ligne
#7 Le 19/04/2022, à 20:42
- kholo
Re : [Résolu]shell, fichiers et regex pour 0 ou 1 caractère
re...
je ne comprend pas le côté trop puissant...
le find exécute un cat avec le résultat et à l'avantage de renvoyer une chaine vide si il ne trouve rien...
et si tu as une idée de la lettre
cat [a-z]Sousdossier/texte.txt
ou si tu fais une recherche plus complexe, peut être avec du python...
Hors ligne
#8 Le 19/04/2022, à 20:45
- Watael
Re : [Résolu]shell, fichiers et regex pour 0 ou 1 caractère
à part l'astérisque, qui inclut la chaîne nulle, je ne vois pas de solution simple.
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#9 Le 19/04/2022, à 20:46
- Sciensous
Re : [Résolu]shell, fichiers et regex pour 0 ou 1 caractère
@kholo: justement c'est soit zéro soit un caractère, or le ? ou les [] ne marchent que s'il y a un caractère au moins
@watael: oui c'est ce que j'en déduis
pas grave, inutile de se prendre la tête (c'est juste dommage que ça n'existe pas pour les développements de chemin -jamais j'aurais pensé à cette expression )
Dernière modification par Sciensous (Le 19/04/2022, à 20:48)
antiX 19 et 21 et Ubuntu 20.04 et 22.04
( sous LXDE et gnome-shell )
Hors ligne
#10 Le 19/04/2022, à 20:50
- kholo
Re : [Résolu]shell, fichiers et regex pour 0 ou 1 caractère
oui...
ça peut vite devenir une usine à gaz si tu cherches avec 0 caracère
Hors ligne
#11 Le 19/04/2022, à 22:42
- kholo
Re : [Résolu]shell, fichiers et regex pour 0 ou 1 caractère
... re re
trouvé : les accolades pour le nombre de caractères !!!
cat {,[a-zA-Z0-9]}Sousdossier/texte.txt
nombre d’occurrence à 0 ou 1 lettre contenue dans un modèle
marche aussi avec find...
find ./{,[a-zA-Z0-9]}Sousdossier -iname texte.txt
et donc avec le find et cat
find ./{,[a-zA-Z0-9]}Sousdossier -iname texte.txt -exec cat '{}' \;
Hors ligne
#12 Le 19/04/2022, à 22:47
- Watael
Re : [Résolu]shell, fichiers et regex pour 0 ou 1 caractère
oui, c'est une bonne idée !
mais est-ce assez simple pour Sciensous ?
normal que ça marche avec find : ça marche avec toutes les commandes, puisque c'est bash qui fait ce développement !
Dernière modification par Watael (Le 19/04/2022, à 22:48)
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#13 Le 19/04/2022, à 22:52
- kholo
Re : [Résolu]shell, fichiers et regex pour 0 ou 1 caractère
merci Watael
oui... je pense... c'est bizarrement très simple...
les accolades pour quantifier les occurrences...
pour find, c'était juste pour dire...
en fait je cherchais avec python mais ça ne fonctionne pas tel quel !!!
... mais je vais creuser pour ma culture perso... je suis plus python en ce moment !!
Hors ligne
#14 Le 20/04/2022, à 08:18
- Sciensous
Re : [Résolu]shell, fichiers et regex pour 0 ou 1 caractère
ah oui bien vu
oui c'est assez simple pour moi
encore merci kholo et Watael
antiX 19 et 21 et Ubuntu 20.04 et 22.04
( sous LXDE et gnome-shell )
Hors ligne