Rechercher : dans
Par :

[bash] exp rationnelles et variable

Dernière réponse le 7 avr 2006 à 19:46:24 bobo25, le 25 mar 2006 à 23:45:09 
 Signaler ce message aux modérateurs

Bonjour à tous
j'aurais 2 petites question à poser à propos d'Unix :

1. Quelle est l'expression rationnelle désignant une lettre minuscule.
J'ai essayé par exemple ls -l [a-z]* mais j'ai 2 problèmes : je trouve tous les fichiers dont le nom commence par une lettre (majuscule et minuscule) et ça m'affiche la liste des fichiers en récursif.

2. Comment obtenir le PID d'un processus. Il y a bien la variable $PPID mais pas PID.

Merci

Meilleures réponses pour « [bash] exp rationnelles et variable » dans :
[Bash] La variable d'environnement PATH Voir La variable d'environnement PATH I. Préambule II. C'est quoi le shell ? III. Définition IV. Séance de dissection V. Ajouter un répertoire à la variable PATH VI. Et puis... I. Préambule Sous les systèmes GNU/Linux qu'on le veuille ou...
Le remplacement de variables en shell Bash Voir =Le remplacement de variables= Introduction Il peut s'avérer utile de s'assurer qu'une variable est bien définie avant de procéder à son remplacement, ou tout simplement de s'assurer que celle-ci n'est pas vide, et dans ce cas de l'initialiser avec...
[Shell] Tester une variable numérique VoirTester une variable numérique    Préambule Dans un environnement "shell", les variables sont, par défaut, de type "chaîne de caractères". De ce fait il n'est pas possible de déclarer une variable de type "entier" (enfin, ceci n'est pas tout à...
Comment récupérer le résultat d'une commande dans une variable VoirComment récupérer le résultat d'une commande dans une variable Préambule Syntaxe Exemples Préambule Il est bien souvent nécessaire de récupérer le résultat d'une commande (ou de son code retour) dans une variable afin de pouvoir...
Bash - Les paramètres VoirIntroduction Les paramètres positionnels Exemple 1 Les paramètres spéciaux Exemple 2 Initialiser des paramètres - La commande "set" - Exemples - La commande "shift" - Exemple 3 Introduction Il est possible de fournir à un script,...
Javascript - Les variables VoirLe concept de variable Une variable est un objet repéré par son nom, pouvant contenir des données, qui pourront être modifiées lors de l'exécution du programme. En Javascript, les noms de variables peuvent être aussi long que l'on désire,...
Variables d'environnement VoirVariables d'environnement Une variable d'environnement est une valeur dynamique, chargée en mémoire, pouvant être utilisée par plusieurs processus fonctionnant simultanément. Sur la plupart des systèmes d'exploitation, les emplacement de...
Javascript - L'objet RegExp VoirLes particularités de l'objet RegExp L'objet RegExp est un objet permettant de manipuler des expressions régulières, c'est-à-dire des modèles créés à l'aide de caractères ASCII permettant de manipuler des chaînes de caractères, afin de trouver des...

1

lami20j, le 25 mar 2006 à 23:51:53

Salut,
1

[root@localhost ~]# ls -l | egrep '^[a-z]+'
total 6396
drwxr-xr-x 4 root lami 4096 aoû 15 2005 abc
drwxr-xr-x 3 root lami 4096 jui 17 2005 abcdelasecurite.free.fr
lrwxrwxrwx 1 root lami 18 sep 8 2005 bin -> /home/lamitest/bin
lrwxrwxrwx 1 root lami 25 jun 27 2005 c -> /mnt/hda5/programmation/c
drwxr-xr-x 3 root lami 4096 jui 17 2005 clx.anet.fr
drwxr-xr-x 2 root lami 4096 jui 13 2005 delete
drwxr-xr-x 3 root lami 4096 mar 20 18:58 eee
drwxr-xr-x 3 root lami 4096 jui 17 2005 free-eos.org
drwxr-xr-x 3 root lami 4096 jui 17 2005 frenchmozilla.sourceforge.net
drwxr-xr-x 3 root lami 4096 jui 17 2005 fr.wikipedia.org
drwxr-xr-x 2 root lami 4096 jui 19 2005 index_fichiers
drwxr-xr-x 2 root lami 4096 jui 17 2005 lea-linux.org
drwxr-xr-x 3 root lami 4096 jui 24 2005 linuxfr.org
drwxr-xr-x 2 root lami 4096 fév 24 07:38 lll
drwxr-xr-x 2 root lami 4096 jui 17 2005 modules.npds.org
drwxr-xr-x 2 root lami 4096 jui 17 2005 pegase.foxalpha.com
drwxr-xr-x 2 root lami 4096 jui 17 2005 petition.eurolinux.org
drwxr-xr-x 2 root lami 4096 jui 17 2005 phpnuke-france.org
drwxr-xr-x 3 root lami 4096 jui 17 2005 prdownloads.sourceforge.net
drwxr-xr-x 2 root lami 4096 jun 26 2005 redirection_site_fichiers
drwxr-xr-x 4 root lami 4096 jui 17 2005 sourceforge.net
drwxr-xr-x 2 root lami 4096 jui 17 2005 tuxmobil.org

2

[root@localhost ~]# pgrep firefox-bin
2786
[root@localhost ~]#

Répondre à lami20j

2

bobo25, le 26 mar 2006 à 00:33:09

Ok merci pour ton aide je vais essayer ça :-)

Répondre à bobo25

3

bobo25, le 31 mar 2006 à 23:10:52

Merci mais la première commande ne fonctionne pas.
Je voudrais savoir pourquoi l'expression rationnelle [a-z] n'affiche pas que les caractères minuscules.

Répondre à bobo25

4

lami20j, le 31 mar 2006 à 23:47:18

Salut,

puique en fait '^[a-z]+' commence au début de chaîne donc elle voit au début drwxr-xr-x

d c'est une minuscule

En bref la commande n'est pas la bonne. Désolé.

Essaie ça

perl -e 'while (<*>) { if (/^[a-z]/ && -f){ system "ls -l $_" }}'     

Répondre à lami20j

5

bobo25, le 1 avr 2006 à 01:09:02

Merci pour ton aide mais j'ai oublié de préciser que c'est à but pédagogique que je cherche à faire ça, pour apprendre le bash en fait.

Quand j'utilise une expression rationnelle pour le premier caractère avec ls, il me cherche les fichiers dans les sous-répertoires.

par exemple je viens d'essayer ls [L]* ça me sort 3 fichiers qui ne sont pas dans le répertoire courant et dont le nom ne commence pas par L

C'est quand même bizarre.

Merci encore pour ton aide :-)

Répondre à bobo25

6

lami20j, le 1 avr 2006 à 09:34:46

Salut,

apprendre le bash en ce cas http://www.trustonme.net/didactels/148.html
http://www.ac-creteil.fr/reseaux/systemes/linux/shell-script­s/shell-bash.html
http://www-gtr.iutv.univ-paris13.fr/Cours/Mat/Systeme/TDTP20­03/tp03.html
http://abs.traduc.org/abs-3.4-fr/index.html

En ce qui concerne la commande ls son rôle est d'afficher le contenu d'un répertoire courant et pas de traiter les expressions régulières (regex - Regular Expression).

En revanche on peut exploité le résultat de ls par le biais d'un pipe | (à lir paip et pas pip ) ou tube si tu veux.

Que veut dire ça?

La sortie de ls on le transmet à une autre commande

cmd1 | cmd2

donc la sortie de cmd1 et l'entrée de cmd2

En ce qui conerne ta commande ls [L]* il faut regarde dans man ls le SYNOPSIS de la commande

ls [options] [fichier...]

Donc ls ne traite pas les regex.
ls -l a* veut dire d'afficher les fichiers qui commence avec a

Mais a* ce n'est pas une regex. C'est une globalisation, à lire a suit de n'importe quel caractère ( en regex on écrit a.* ).

[lamitest@localhost ~]$ ls -l a*
-rwx------  1 lamitest lamitest     327 jan 27 20:37 aaaaa
-rw-rw-r--  1 lamitest lamitest       0 mar  5 13:15 aaa_bbb.sql
-rw-rw-r--  1 lamitest lamitest       0 mar  5 13:15 aaa_BBB.sql
-rw-rw-r--  1 lamitest lamitest       0 mar  5 13:15 aaa.sql
-rwx------  1 lamitest lamitest      42 mar  4 20:43 aa.sh
-rw-rw-r--  1 lamitest lamitest   68159 mar 28 23:21 affich-2168110-en-perl-recuperer-un-texte-entre-2-balises.ht­m
-rw-rw-r--  1 lamitest lamitest     260 jan 15 16:48 amariei.html.txt
-rw-rw-r--  1 lamitest lamitest 2421491 jan 15 17:36 archive
-rw-rw-r--  1 lamitest lamitest 1362673 jan 15 17:35 archive.tar.bz2
-rw-rw-r--  1 lamitest lamitest 2421491 jan 15 17:33 archive.tar.gz
-rwx------  1 lamitest lamitest     952 oct  8 20:16 array_intersect.pl
-rwx------  1 lamitest lamitest    4849 nov 16 21:14 avider
-rwxrwxrwx  1      700 lamitest     154 nov 16 21:14 avider.c
[lamitest@localhost ~]$ ls -l A*
-rw-rw-r--  1 lamitest lamitest 0 mar  5 13:15 AAA_bbb.sql
-rw-rw-r--  1 lamitest lamitest 0 mar  5 13:15 AAA_BBB.sql
-rw-rw-r--  1 lamitest lamitest 0 mar  5 13:15 AAA_.sql
[lamitest@localhost ~]$ ls 'a.*'
ls: a.*: Aucun fichier ou répertoire de ce type
[lamitest@localhost ~]$

La commande que je t'ai donné en 1er ne fonctionne pas ( je n'a pas fait attention en fait puisque j'avais que des fichiers avec de nom qui commenca avec une minuscules)

Voilà un bon ex :

Minuscules
[lamitest@localhost ~]$ ls | egrep '^[a-z]+'
aaaaa
aaa_bbb.sql
aaa_BBB.sql
aaa.sql
Majuscules
[lamitest@localhost ~]$ ls | egrep '^[A-Z]+'
AAA_bbb.sql
AAA_BBB.sql
AAA_.sql
CGI-Session-4.03
Desktop
FileZilla_3_i386-linux-bin.tar.bz2
Sans titre.JPG
T1T3.txt
[lamitest@localhost ~]$

Donc on le résultat de ls et traiter par egrep (qui lui utilse des regex).
ls -l | egrep '^[a-z]+' ne fonctionne pas comment on vut puisque ls -l génére un logn affichage de genre
drwxrwxr-x 2 lamitest lamitest 4096 jan 18 18:30 test
-rw-rw-r-- 1 lamitest lamitest 81 jan 19 21:59 uuu

En ce cas la lettre chercher n'est pas la 1ère lettre du fichier ( test ou uuu) mais la 1ère lettre de la chaîne. Dans notre cas c'est la lettre l et la 2ème n'est pas trouvée puiqu'elle commence avec -

A voir les commandes cut, egrep, sed.

Répondre à lami20j

7

jipicy, le 1 avr 2006 à 09:40:30

Salut,

Essaie ça :

ls | grep -v [A-Z]
;-)) Z'@+...che.
JP : Zen, my Nuggets ! ;-)
Le savoir n'est bon que s'il est partagé.

Répondre à jipicy

8

bobo25, le 1 avr 2006 à 12:08:55

Je sais ce qu'est la fonction ls, et je connais aussi les redirection (tubes, <, <<, >, >>...) mais ce que je ne comprenais pas c'est pourquoi une expression rationnelle n'était pas prise en compte par ls.
Donc ls ne les prend pas en compte ? Pourtant j'avais essayé ls -l [0-9]* et ça m'affichait bien les fchiers commençant par un chiffre. Enfin je vais réessayer.

Je vais aussi essayer vos liens et vos commandes merci pour votre aide.

Répondre à bobo25

9

lami20j, le 1 avr 2006 à 14:24:57

Re,

Je sais ce qu'est la fonction ls Tu es sur?

mais ce que je ne comprenais pas c'est pourquoi une expression rationnelle n'était pas prise en compte Puisque ls n'est pas conçu pur ça.

man ls

ls, dir, vdir - Afficher le contenu d'un repertoire.

ls c'est une commande pour lister les fichiers et pas un interpreteur des regex

Qu'il prends en arguments certains motifs c'est grâce au shell et pas à la commande.

man bash

 Développement des noms de fichiers
       Apres  le  découpage des mots, et si l'option -f n'est pas
       indiquée, bash recherche dans chaque mot les caractères *,
       ?,  et  [.   Si  l'un d'eux apparaît, le mot est considéré
       comme un motif, et remplacé par  une  liste,  classée  par
       ordre  alphabétique,  des noms de fichiers correspondant à
       ce motif.  Si aucun nom de fichiers ne correspond,  et  si
       la variable allow_null_glob_expansion n'existe pas, le mot
       reste inchangé.  Si la variable existe, et si aucune  cor­
       respondance  n'est  trouvée, le mot est éliminé.  Quand un
       motif est utilisé pour créer des chemins d'accès, le  car­
       actère  ``.''   au  début  d'un nom, ou immédiatement à la
       suite d'un slash doit être explicitement mis en correspon­
       dance,  à  moins  que la variable shell glob_dot_filenames
       n'existe.  Dans tous les autres cas,  le  caractère  ``.''
       n'est  pas traité spécifiquement.  Le caractère slash doit
       toujours être mis en correspondance explicitement.

       Les caractères spéciaux ont les significations suivantes :

       *      Correspond  à n'importe quelle chaîne, y compris la
              chaîne vide.
       ?      Correspond à n'importe quel caractère.
       [...]  Correspond à l'un des  caractères  entre  crochets.
              n'importe  quel  caractère  situé  entre  les  deux
              bornes incluses.  Si le premier  caractère  suivant
              le  [  est un !  ou un ^ alors la correspondance se
              fait sur les caractères non-inclus.  Un - ou  un  ]
              peuvent  être mis en correspondance en les incluant
              en premier ou dernier caractère de l'ensemble.

Et le comportement de ls est bizarre
[lamitest@localhost rep_null]$ ls -1
7oo
a9aa
aaa
aUljjl
egd
ggg
Ujkj
Vdfs
[lamitest@localhost rep_null]$ ls -l [A-Z]*
-rw-rw-r--  1 lamitest lamitest 0 avr  1 08:50 egd
-rw-rw-r--  1 lamitest lamitest 0 avr  1 08:50 ggg
-rw-rw-r--  1 lamitest lamitest 0 avr  1 08:50 Ujkj
-rw-rw-r--  1 lamitest lamitest 0 avr  1 08:50 Vdfs
[lamitest@localhost rep_null]$ ls -l [a-z]*
-rw-rw-r--  1 lamitest lamitest 0 avr  1 14:08 a9aa
-rw-rw-r--  1 lamitest lamitest 0 avr  1 08:50 aaa
-rw-rw-r--  1 lamitest lamitest 0 avr  1 08:50 aUljjl
-rw-rw-r--  1 lamitest lamitest 0 avr  1 08:50 egd
-rw-rw-r--  1 lamitest lamitest 0 avr  1 08:50 ggg
-rw-rw-r--  1 lamitest lamitest 0 avr  1 08:50 Ujkj
-rw-rw-r--  1 lamitest lamitest 0 avr  1 08:50 Vdfs
[lamitest@localhost rep_null]$

Répondre à lami20j

10

lami20j, le 1 avr 2006 à 14:55:22

Re,

voilà une réponse qui pourra te satisfaire

Affichage complet

[lamitest@localhost rep_null]$ ls -l
total 0
-rw-rw-r--  1 lamitest lamitest 0 avr  1 14:08 7oo
-rw-rw-r--  1 lamitest lamitest 0 avr  1 14:08 a9aa
-rw-rw-r--  1 lamitest lamitest 0 avr  1 08:50 aaa
-rw-rw-r--  1 lamitest lamitest 0 avr  1 08:50 aUljjl
-rw-rw-r--  1 lamitest lamitest 0 avr  1 08:50 egd
-rw-rw-r--  1 lamitest lamitest 0 avr  1 08:50 ggg
-rw-rw-r--  1 lamitest lamitest 0 avr  1 08:50 Ujkj
-rw-rw-r--  1 lamitest lamitest 0 avr  1 08:50 Vdfs

Affichage majuscules seulement
[lamitest@localhost rep_null]$ ls -l -I '[a-z0-9]*'
total 0
-rw-rw-r--  1 lamitest lamitest 0 avr  1 08:50 Ujkj
-rw-rw-r--  1 lamitest lamitest 0 avr  1 08:50 Vdfs
[lamitest@localhost rep_null]$
Affichage minuscules seulement
[lamitest@localhost rep_null]$ ls -l -I '[A-Z0-9]*'
total 0
-rw-rw-r--  1 lamitest lamitest 0 avr  1 14:08 a9aa
-rw-rw-r--  1 lamitest lamitest 0 avr  1 08:50 aaa
-rw-rw-r--  1 lamitest lamitest 0 avr  1 08:50 aUljjl
-rw-rw-r--  1 lamitest lamitest 0 avr  1 08:50 egd
-rw-rw-r--  1 lamitest lamitest 0 avr  1 08:50 ggg
[lamitest@localhost rep_null]$
lami20j

P.S. N'oublie pas que les motifs représent l'interpretation de shell pour les noms de fichiers

L'option I du ls permet d'ignorer le motif (l'expansion des noms des fichiers pas shell et pas les regex de ls - On n'a pas de regex pour ls)

On l'appelle globalisation, regex c'est totalement different.

* veut dire n'importe quel chaîne y compris la chaîne vide

En regex * c'est un quantificateur qui veut dire zéro fois, une fois ou autant des fois que tu peux.

J'espère que j'ai réussi à te faire comprendre. Merci

Répondre à lami20j

11

bobo25, le 7 avr 2006 à 18:17:21

Merci ça marche cette fois-ci.
J'ai pas tout compris, mais c'est pas grave je finirai bien par comprendre un jour !

Répondre à bobo25

12

 lami20j, le 7 avr 2006 à 19:46:24

Salut,

mais c'est pas grave je finirai bien par comprendre un jour

En ce cas je ne m'inquiète pas.

Bonne continuation.

lami20j

Répondre à lami20j