ksh suite et fin (en principe)
Le
mulan
Bonjour,
3e post de demande d'aide en espérant que ce sera la dernière fois. Mes
souvenirs de shell sont un peu plus lointains que je ne le croyais et
certains questionnements se traduisent par un état de purée en guise de
réponse :) Il faut dire aussi que je n'ai vraiment pas le temps de faire des
recherches ni des tests malgré toutes les bonnes adresses de sites que j'ai
récoltées.
Donc voici de nouveaux problèmes à résoudre:
1) Comment accéder à un élément de liste car si ce n'est pas déclaré sous
forme de tableau ça ne marche pas. Autrement dit l'appel à ${tab[i]} ne
fonctionne que si j'ai déclaré:
tab[1]="a"
tab[2]="b"
etc
mais moi je voudrais déclarer des:
tab="a b c d e"
et accéder quand même à tab[i], sauf que ça ne fonctionne pas (et ce n'est
probablement pas fait pour, mais là aussi bonjour la recherche d'exemples
sur le net. Je dois confondre avec csh peut-être).
2) Matching sur une liste d'élements
Je déclare un modèle de nom de fichier du genre:
MODELE="xxx__[0_9][0-9]"
Autrement dit, tout fichier commençant par le mot xxx, qui après le _
comporte 3 caractères quelconques et qui se termine par 2 chiffres.
Je sais faire le match sur une variable contenant un nom de fichier en
utilisant expr: c'est ok. Mais je n'arrive pas à le coder sur la sortie d'un
ls du répertoire pour rediriger directement dans un tableau la liste de tous
les fichiers qui correspondent à ce modèle. J'en appelle encore une fois aux
pros de ce forum Et je rappelle que je n'ai toujours pas eu le choix du
langage ;)
3e post de demande d'aide en espérant que ce sera la dernière fois. Mes
souvenirs de shell sont un peu plus lointains que je ne le croyais et
certains questionnements se traduisent par un état de purée en guise de
réponse :) Il faut dire aussi que je n'ai vraiment pas le temps de faire des
recherches ni des tests malgré toutes les bonnes adresses de sites que j'ai
récoltées.
Donc voici de nouveaux problèmes à résoudre:
1) Comment accéder à un élément de liste car si ce n'est pas déclaré sous
forme de tableau ça ne marche pas. Autrement dit l'appel à ${tab[i]} ne
fonctionne que si j'ai déclaré:
tab[1]="a"
tab[2]="b"
etc
mais moi je voudrais déclarer des:
tab="a b c d e"
et accéder quand même à tab[i], sauf que ça ne fonctionne pas (et ce n'est
probablement pas fait pour, mais là aussi bonjour la recherche d'exemples
sur le net. Je dois confondre avec csh peut-être).
2) Matching sur une liste d'élements
Je déclare un modèle de nom de fichier du genre:
MODELE="xxx__[0_9][0-9]"
Autrement dit, tout fichier commençant par le mot xxx, qui après le _
comporte 3 caractères quelconques et qui se termine par 2 chiffres.
Je sais faire le match sur une variable contenant un nom de fichier en
utilisant expr: c'est ok. Mais je n'arrive pas à le coder sur la sortie d'un
ls du répertoire pour rediriger directement dans un tableau la liste de tous
les fichiers qui correspondent à ce modèle. J'en appelle encore une fois aux
pros de ce forum Et je rappelle que je n'ai toujours pas eu le choix du
langage ;)

Poser une question


utiliser la syntaxe suivante
set -A tab a b c d e
le "." pour matcher un caractère quelconque est utilisé par les "regexp", à ne
pas confondre avec les "wildcards" qu'utilise le shell
il faut donc utiliser dans ce cas le caractère "?"
Pour ma part je m'y prendrais simplement comme ceci:
MODELE="xxx_???_[0_9][0-9]"
set -A tab $MODELE
(attention cependant à la limitation du nombre d'élément dans les tableaux qui
est de 4096 en pour le ksh88, je ne connais pas la limite pour ksh93)
--
Gilles Pion
Ben justement c'était pour donner à expr qui mange de l'expression
régulière. A la limite un '?' le dérangerait davantage je pense.
D'accord mais il est où le parcours du répertoire ?
Pas grave je n'irai pas jusque là :-)
Franchement je ne comprend pas très bien pourquoi tu tiens à utiliser "expr"
Essaie d'abord, tu verras que ça marche.
(Sais-tu que tu n'est pas toujours facile a comprendre?)
Mais si je comprend bien tu veux que le tableau "tab" contienne les noms de
fichiers qui "matchent" l'expression expression régulière (l'utilisation de
wildcards shells ne te convenant pas) contenue dans la variable "MODELE", c'est
ça?
Voici la solution alors, avec une "vraie" regexp, et sans "expr":
MODELE="xxx_..._[0_9][0-9]"
set -A tab $(ls | grep "$MODELE")
--
Gilles Pion
perso, j'm'demande si vous n'êtes pas en train de lui résoudre ces
exercices de noël... ? mais ce n'est que mon avis :-)
Cordialement,
Cyrille Lefevre.
--
mailto:Cyrille.Lefevre-news%
supprimer "%nospam% et ".invalid" pour me repondre.
Parce que je connais, que j'aime bien et que je ne connais pas tout. C'est
pour ça que je viens poser des questions ici.
Heeeeuuuuu moi aussi je capte pas tout dans tes explications.
Faux, ça ne me convient pas que si j'utilise expr, oeuf corse.
Toutafé.
Ok j'essaierai merci.