Lancer un shell sur IBm i.
Il vous faut PASE et idéalement 5733SC1 (openssl et ssh)
Si vous avez installé 5733SC1, le plus simple (et le plus convivial) est de démarrer SSH (STRTCPSVR *SSHD)
et de vous connecter depuis une application cliente (compatible tty):
QSYS2.SET_PASE_SHELL_INFO, procédure pour définir le shell par défaut sous PASE
CALL QSYS2.SET_PASE_SHELL_INFO('*CURRENT', '/QOpenSys/pkgs/bin/bash');
CALL QSYS2.SET_PASE_SHELL_INFO('*DEFAULT', '/QOpenSys/usr/bin/ksh');
LC_ALL=fr_FR.UTF-8 export LC_ALL |
PATH=/QOpenSys/pkgs/bin:$PATH LIBPATH=/QOpenSys/pkgs/lib:$LIBPATH |
RESET="\033[0m" BG_YELLOW="\033[43m" |
Dans un schell vous pouvez utiliser des caractères "joker" ( un peu comme les expressions régulières, moins puissant)
‘?’ remplace n'importe quel caractère (1 fois), on peut saisir plusieurs ‘?’.
Example-1:
Recherchons les fichiers .txt : ls permet de voir le contenu d'un répertoire
$ ls –l
pour chercher les fichiers ayant 4 caractères de long avec l'extension .txt
$ ls -l ????.txt
Example-2:
Recherchons maintenant les fichiers commencant par vin suivit de 5 caractères avec l'extension .json
$ ls -l vin?????.json
Example-3:
maintenant un fichier nommé unicode, quelque soit l'extension (sur 3)
$ ls -l unicode.???
‘*’ remplace entre 0 et n caractères (comme le % du like SQL)
Example -1:
Tous les fichiers avec l'extension .pcml
$ ls -l *.pcml
Example-2:
tous ceux dont le nom commence par un v
$ ls -l v*.*
Example-3:
Vous pouvez l'appliquez dans un script Shell, permettant à l'utilisateur de répondre O ou o ou OUI ou Oui à la question suivante
#!/bin/bash
echo "Confirmez vous ?"
read answer
case $answer in
[Oo]* ) echo "confirmation.";;
[Nn]* ) echo "Non confirmé.";;
*) echo "essaies encore.";;
esac
Lançons le script
‘[ ]’ permet de préciser une série ou une plage de valeurs
Example -1:
Cherchons tout ce qui commence par u ou v ou w
$ ls -l [u-w]*.*
Example-2:
tous les fichiers dont le nom commence par un chiffre
$ ls -l [1-9]*
permet de nier une série de caractères
Example :
Cherchons tout ce qui commence pas par "entre e et z"
$ ls -l ![e-z]*
‘{ }’ permet de faire un OU logique entre deux expressions
Example :
listons les fichiers ayant l'extension .xml ou .json
$ ls -l *{.xml,.json}
Example – 2:
Pour supprimer les fichiers ex... ayant l'extension .doc ou .docx
$ rm ex*{.doc,.docx}
‘\’ permet de faire perdre à un métacaractère sa valeur de métacaractère
Example :
supprimons les fichiers ayant comme nom "vinsp*.txt" (sans supprimer vinsp1.txt !)
rm vinsp\*.txt
Enfin, Midnight Commander sait aussi utiliser ces notions, par exemple lors d'une copie
Aide (F1)
. | n'importe quel caractère (sauf fin de ligne), une fois |
.* | N'importe quel caractères, 0 ou plusieurs fois |
^ | Début de ligne |
$ | Fin de ligne |
[ - ] | plage de caractères |
[^ - ] | tout sauf la plage |
[ ] permettent de préciser une plage de caractères
[[:alpha:]] | une lettre |
[[:upper:]] | majuscule |
[[:lower:]] | minuscule |
[[:digit:]] | un chiffre |
[[:xdigit:]] | chiffre en héxa [0-9A-F] |
[[:alnum:]] | alpha (lettre ou chiffre) |
[[:space:]] | Espace, tabulation, LF, CRLF |
[[:blanc:]] | espace |
[[:punct:]] | ponctuation |
[[:cntrl:]] | car. de contrôle |
[[:print:]] | car. imprimable |
[[:grapht:]] | Tout sauf alphanumérique et ponctuation |
Les utilitaires du monde Unix ( sed, GNU grep ou vi) utilisent par défaut la norme BRE (« Basic Regular Expression ») de POSIX.
Dans celle-ci, les accolades, les parenthèses, le symbole « ? » et le symbole « + » ne sont pas des métacaractères : ils ne représentent qu'eux même.
Pour prendre leur sémantique de métacaractères, ils ont besoin d'être échappés par le symbole « \ ».
Sur IBM i, par défaut grep utilise les expresison régulières basiques
qui reconnaissent en plus ces opérateurs
\{x\} | x occurrences de l'expression placée devant |
\{x,\} | au moins x occurrences |
\{x,y\} | entre x et y occurrences |
\( \ ) | sous expression (sont mémorisées, peuvent être imbriquées) |
\n | rappel d'une sous expression précédente |
Les expressions régulières étendues POSIX (ERE pour « Extented Regular Expression »). Contrairement aux expressions régulières basiques, elles reconnaissent les caractères vus plus haut comme des métacaractères. Ils doivent ainsi être échappés pour être interprétés littéralement (\+ pour rechercher le caractère +, par exemple) .
l'option -E permet l'utilisation des expressions régulières étendues, où l'échappement n'est plus nécessaire
et qui reconnaissent ces opérateurs
{x} | x occurrences de l'expression placée devant |
{x,} | au moins x occurrences |
{x,y} | entre x et y occurrences |
{,y} | au maximum y occurrences |
( ) | regroupement |
| | ou |
? | 0 ou 1 fois (car. ou groupe) |
+ | 1 à n fois (car. ou groupe) |
soit ‘list.txt’ avec ce contenu.
Apple 4000 Banana 700 Orange 850 Pear 9000 Jackdruit
(--color=always, met de la couleur pour matérialiser les résultats)
$ find . -regex 'expression régulière' -print(Attention, find retourne le nom de fichier précédé du chemin ./, il faut en tenir compte)
$ find . -regex 'expression régulière' -exec chown QPGMR {} \;
-exec option pour exécuter une commande à chaque occurrence
la-commande :•elle contient {} qui sera remplacé par le nom de l'élement en cours
•elle se termine impérativement par \;
ce qui permet d'enchainer avec d'autres options :$ find . -regex 'expression régulière' -exec chown QPGMR {} \; -print
On peut utiliser ‘^’ qui matérialise le début de ligne (avec une plage entre crochet dans notre exemple)
Example-3:
Cherchons les lignes du fichier list.txt commencant par P ou Q ou R.
$ grep '^[P-R]' list.txt
‘$’matérialise la fin de ligne
Example-4:
Tout ce qui se termine par un zéro
$ grep 0$ list.txt
F15 sous EDTF pour vérifier
Enfin on peut "sauvegarder" une expression régulière en la placant entre \( et \) pour la réutiliser ensuite par \1 pour la première, \2 pour la deuxième, etc...
Les références arrières permettent de faire référence à un même groupement capturé.
Par exemple « b\(.\)b\1 » entrera en correspondance avec « bébé » et « bobo » (la deuxième occurrence est la même que la première) mais pas « baby » (a et y sont différents).
Example-5 :
Cherchons les lignes contenant la même séquence de deux caractères, deux fois
$ grep '\([a-z][a-z]\).*\1' list.txt
Cherchons les lignes contenant "an" ou "p" 2 fois exactement (le ou du | n'est disponible qu'avec -E)
$ grep -E '(an|p){2}' list.txt
par défaut le résultat de cette commande va dans la sortie standard stdout
La fonction de substitution s permet de changer la première ou toutes les occurrences d'une chaîne par une autre. La syntaxe est la suivante:
La fonction de substitution peut évidemment être utilisée avec une expression régulière.
La fonction a ajoute un texte après le texte sélectionné
La fonction i ajoute un texte avant le texte selectionné