Shell




BoTTom

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

 

GLOBBING

 

Dans un schell vous pouvez utiliser des caractères "joker" ( un peu comme les expressions régulières, moins puissant)

 

Point d'interrogation (Question mark) – ?

‘?’ 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.???

Asterix (Asterisk) – *

‘*’ 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


Crochets (Square Bracket) – [ et ]

‘[ ]’ 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]*


Point d'exclamation (Exclamatory Sign) – !

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]*

 

Accolades (Curly bracket) – { et }

‘{ }’ 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}

Antislash (backslash) – \

‘\’ 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)

Expressions régulières

la commande GREP (mais aussi sed et find avec -regexp) utilise la notion d'expression régulière

elle possède aussi ces options :

Comme le globbing on utilise des méta-caractères

caractères communs à toutes les formes d'expression régulière
. 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

avec les expressions régulière POSIX vous avez droit aux noms symboliques suivants

[[: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)

Exemples

soit ‘list.txt’ avec ce contenu.

Apple
4000
Banana
700
Orange
850
Pear
9000
Jackdruit



Recherches basique

Example -1

Cherchons les lignes du fichier list.txt contenant trois zéros

 


(--color=always, met de la couleur pour matérialiser les résultats)

avec l'option -E


Exemple -2

find, recherche dans un répertoire

$ find . -regex 'expression régulière' -print 
(Attention, find retourne le nom de fichier précédé du chemin ./, il faut en tenir compte)



vous pouvez même exécuter une commande
$ 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

 

Accent circonflex (Caret) – ^

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

 

Dollar – $

‘$’matérialise la fin de ligne


Example-4:

Tout ce qui se termine par un zéro

$ grep 0$ list.txt

 

 

Attention, la notion de fin de ligne sous Unix veut dire le caractère LF (LineFeed), pas CRLF



F15 sous EDTF pour vérifier

 

Back References (sauvegarde d'expression)

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

 

Recherches étendues

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

 

SED, éditeur de fichier en ligne de commande

par défaut le résultat de cette commande va dans la sortie standard stdout

La fonction de substitution s

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 de suppression d

La fonction a ajoute un texte après le texte sélectionné

La fonction i ajoute un texte avant le texte selectionné

 


Copyright © 2020 VOLUBIS