Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

ksh suite et fin (en principe)

12 réponses
Avatar
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 ;)

10 réponses

1 2
Avatar
Gilles Pion
Ref: <4d138f7c$0$18113$ de mulan

mais moi je voudrais déclarer des:
tab="a b c d e"


utiliser la syntaxe suivante
set -A tab a b c d e



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.



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 "?"


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 ;)



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
Avatar
mulan
"Gilles Pion" a écrit dans le message de news:

Ref: <4d138f7c$0$18113$ de mulan

mais moi je voudrais déclarer des:
tab="a b c d e"


utiliser la syntaxe suivante
set -A tab a b c d e



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.



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 "?"



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.

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 ;)



Pour ma part je m'y prendrais simplement comme ceci:
MODELE="xxx_???_[0_9][0-9]"
set -A tab $MODELE



D'accord mais il est où le parcours du répertoire ?

(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)



Pas grave je n'irai pas jusque là :-)
Avatar
Gilles Pion
Ref: <4d13a8ac$0$969$ de mulan


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.



Franchement je ne comprend pas très bien pourquoi tu tiens à utiliser "expr"


Pour ma part je m'y prendrais simplement comme ceci:
MODELE="xxx_???_[0_9][0-9]"
set -A tab $MODELE



D'accord mais il est où le parcours du répertoire ?



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
Avatar
Cyrille Lefevre
Bonjour,

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.
Avatar
mulan
"Gilles Pion" a écrit dans le message de news:

Ref: <4d13a8ac$0$969$ de mulan


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.



Franchement je ne comprend pas très bien pourquoi tu tiens à utiliser
"expr"



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.

Pour ma part je m'y prendrais simplement comme ceci:
MODELE="xxx_???_[0_9][0-9]"
set -A tab $MODELE



D'accord mais il est où le parcours du répertoire ?



Essaie d'abord, tu verras que ça marche.

(Sais-tu que tu n'est pas toujours facile a comprendre?)



Heeeeuuuuu moi aussi je capte pas tout dans tes explications.

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)



Faux, ça ne me convient pas que si j'utilise expr, oeuf corse.

contenue dans la variable "MODELE", c'est
ça?



Toutafé.

Voici la solution alors, avec une "vraie" regexp, et sans "expr":

MODELE="xxx_..._[0_9][0-9]"
set -A tab $(ls | grep "$MODELE")



Ok j'essaierai merci.
Avatar
Stephane CHAZELAS
2010-12-23, 22:11(+01), Gilles Pion:
Ref: <4d13a8ac$0$969$ de mulan


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.



Franchement je ne comprend pas très bien pourquoi tu tiens à utiliser "expr"


Pour ma part je m'y prendrais simplement comme ceci:
MODELE="xxx_???_[0_9][0-9]"
set -A tab $MODELE



D'accord mais il est où le parcours du répertoire ?



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")



Ca serait plutot:

set -f
IFS='
'
set -A tab $(ls | grep -xe "$MODELE")

qui ne marche pas s'il y a des fichiers dont le nom contient des
newlines.

set -A xxx_???_[0-9][0-9]

me semble beaucoup plus approprié

--
Stephane
Avatar
mulan
"Stephane CHAZELAS" a écrit dans le message de
news:
2010-12-23, 22:11(+01), Gilles Pion:
Ref: <4d13a8ac$0$969$ de mulan


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.



Franchement je ne comprend pas très bien pourquoi tu tiens à utiliser
"expr"


Pour ma part je m'y prendrais simplement comme ceci:
MODELE="xxx_???_[0_9][0-9]"
set -A tab $MODELE



D'accord mais il est où le parcours du répertoire ?



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")



Ca serait plutot:

set -f
IFS='
'
set -A tab $(ls | grep -xe "$MODELE")

qui ne marche pas s'il y a des fichiers dont le nom contient des
newlines.

set -A xxx_???_[0-9][0-9]

me semble beaucoup plus approprié



Je ne me rappelle plus si j'ai essayé d'utiliser les '?' sur un ls. Parce
que je travaille sous émulateur et que déjà ce dernier m'envoie paître si je
tente par exemple un ls *.{extension1,extension2} qui fonctionne
parfaitement sur un vrai unix. Ce n'est pas grave parce que je n'en ai pas
besoin pour mon taf actuel.

Après, je ne voudrais me battre avec personne. Mais j'utilise depuis
toujours des '.' avec expr et des '?' dans une commande directe type ls et
je ne pense pas trop me tromper en faisant cela. Pour le set -A, c'est plus
une découverte parce que je suis loin de connaître toutes les possibilités
de la commande set. Dès que possible je testerai vos réponses. Merci à tout
le monde.
Avatar
asl
Le 23-12-2010, Cyrille Lefevre <cyrille.lefevre-news% a écrit :
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 :-)



Je suis plutôt d'accord...

Arnaud.
Avatar
Nicolas George
Cyrille Lefevre , dans le message <if0hu5$1l93$, a
écrit :
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 :-)



D'un autre côté, s'il y a des profs pour donner des exercices en ksh à notre
époque, ils méritent bien d'être traités comme ça.
Avatar
mulan
a écrit dans le message de news:

Le 23-12-2010, Cyrille Lefevre
<cyrille.lefevre-news% a écrit :
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 :-)



Je suis plutôt d'accord...



Je suis plutôt pas d'accord... Quand on ne sait pas, on évite d'accuser à
tort et à travers. Je ne peux pas prouver que je ne suis pas une étudiante
mais vous ne risquez pas d'arriver à prouver le contraire alors le mieux que
vous avez à faire c'est d'éviter de polluer inutilement ce forum.
1 2