|
|
|
|
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
Salut,
|
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.
|
Salut,
[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.htm -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.sqlMajuscules [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. |
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.
|
Re,
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]$ |
Re,
[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 |