Inf1105

9/20/2005

Demo2 (partie 2)

-----------------------------------------------
------------ CINQUIEME PARTIE -----------------
-----------------------------------------------

Dans cette partie, pour exécuter les exemples de commandes, il vous faut copier le fichier /etc/passwd dans le répertoire courant.


SED et AWK
----------

sed : un EDITEUR de fichier texte NON-interactif.

awk : un LANGAGE pour le traitement de "motifs" (pattern).


SED
---

sed reçoit ses entrées d'un fichier ou du clavier (stdin) et affiche ses résultats à l'écran (stdout). sed, tout comme grep, traite les données en entrées une ligne à la fois. Par contre, contrairement à grep, sed permet de modifier le contenu recu en entree.

Voici les commandes de sed que nous verront :
s = substitute (remplacer)
d = delete (supprimer)
p = print (afficher)

Le format général de la commande sed est :

sed -e 'command1' [-e 'command2'] [...] fichier


Substitution :
--------------

Commande : 's/motif_a_remplacer/nouveau_motif/g'

(Le 'g' à la fin est optionnel. S'il est présent, toutes les occurences du motif_a_remplacer seront modifiées et non seulement la première occurence de chaque ligne)

Exemple : remplace la premiere occurence de "comptoir" de chaque ligne par "allo" :
% sed s/comptoir/allo/ passwd

remplace toutes les occurences de "comptoir" par "allo" :
% sed s/comptoir/allo/g passwd

substitution multiples, "comptoir" devient "allo" et "Usager" devient "user", partout dans le texte :
% sed -e s/comptoir/allo/g -e s/Usager/user/g passwd


Suppression :
-------------

Commande : '#ligne_debut[, #ligne_fin]d'

(c'est le 'd' à la fin qui indique qu'il faut supprimer les lignes spécifiées)

Exemple :

supprimer la premiere ligne :
% sed 1d passwd

supprimer les dix première lignes :
% sed 1,10d passwd

supprimer toutes les lignes :
% sed -n '' passwd


Afficher :
----------

Commande : '/motif/p' ou '#ligne_debut[, #ligne_fin]p'
(c'est le 'p' à la fin qui indique qu'il faut afficher les lignes spécifiées)

Exemple :

afficher la ligne qui contient "comptoir" :
% sed -n '/comptoir/p' passwd

afficher les dix premières lignes :
% sed -n '1,10p' passwd


AWK
---

awk est un langage de programmation très complet. Sa syntaxe est fortement inspirée du langage C. awk permet de manipuler les champs.

Le format général de la commande awk est :

awk [-F"séparateur_de_champs"] '{commande}' fichier



Exemples d'utilisation :
------------------------

affichage de champs particuliers :
% awk '{ print $0 }' passwd
% awk '{ print $1 }' passwd
% awk '{ print $2 }' passwd
% awk '{ print $1 $2} passwd
% awk -F":" '{ print $1 $3 }' passwd

affichage de texte statique :
% awk '{ print "" }' passwd
% awk '{ print "allo" }' passwd

affichage combiné de texte tiré du fichier et de texte statique :
% awk -F":" '{ print $1 " " $3 }' passwd
% awk -F":" '{print "login id is : ", $1}' passwd

9/19/2005

Demo2 (partie 1)

-------------------------------------------
----------- QUATRIEME PARTIE --------------
-------------------------------------------


Fichiers texte :
----------------

Avant de continuer : telecharger le fichier : textedemo2.txt


1. Pour afficher le contenu d'un fichier texte :

% more chemin/fichier = affichage du contenu page par page
% less chemin/fichier = comme more mais possibilite de reculer
% head chemin/fichier = affiche les 10 premieres lignes
% tail chemin/fichier = affiche les 10 dernieres lignes
% cat chemin/fichier = cat a beaucoup d'autres fonctions !

exemple :
% cat textedemo2.txt
% more textedemo2.txt (' ' ou enter pour defil.)
% less textedemo2.txt (fleche = defil, q = exit)
% head textedemo2.txt
% tail textedemo2.txt


2. Pour comparer le contenu de deux fichiers texte :

% cmp chemin/fichier1 chemin/fichier2
- affiche l'endroit de la premiere difference (s'il y en a une).

% diff chemin/fichier1 chemin/fichier2
- affiche les lignes qui different.

exemple :
% cp textedemo2.txt textedemo.txt
% pico textedemo.txt
- changer UN caractere du texte
- faite : ^o --> y --> enter
% cmp textedemo2.txt textedemo.txt
% diff textedemo2.txt textedemo.txt
% rm textedemo.txt


3. Pour compter les mots, les caracteres et les lignes contenu dans un fichier texte :

% wc [-lwc] chemin/fichier = commande qui compte les :
- caracteres (-c)
- mots (-w)
- lignes (-l)

exemple :
% wc textedemo2.txt
% wc -c textedemo2.txt
% wc -w textedemo2.txt
% wc -l textedemo2.txt
% wc -lw textedemo2.txt


4. Pour chercher les lignes d'un fichier contenant un motifs :

% grep [-wicvn] "motif[s]" chemin/fichier
% egrep [-wicvn] "motif[s]" chemin/fichier

Options :
- w = chercher le motifs comme mot.
- i = ignore majuscule/minuscule.
- c = affiche seulement le nombre de lignes correspondantes
- v = cherche les ligne qui ne repondent pas au motif
- n = affiche le numero de la ligne avant

Motifs :
- ^ = debut de ligne
- $ = fin de ligne
- \ = annule l'effet du caractere suivant
- \< = debut de mot - \> = fin de mot
- | = ou
- . = un caractere quelconque
- * = n'importe quel chaine de caracteres (chaine vide inclus)

- (), [], ' '= regroupe

exemple :

grep


5. Pour trier les lignes d'un fichier :

% sort [-urk] [debut[,fin]] chemin/fichier

exemple :
% sort textedemo2.txt
% sort -u textedemo2.txt (-u pas de doublons)
% sort -r textedemo2.txt (-r inverse l'ordre)
% sort -k 2 textedemo2.txt (-k debut)
% sort -k 2,4 textedemo2.txt (-k debut et fin)


Contrôle des entrées / sorties :
--------------------------------

6. Pour combiner plusieurs commandes DEPENDANTES : '|'

commande1 | commande2 [ | ... ] = La commande1 s'execute et donne son resultat a commande2 qui le prend pour entree.

exemple :
% ls -l | wc -l (A quoi sert cette commande ?)


7. Pour rediriger l'entree (remplacer le clavier pour les interactivites avec le systeme) ou la sortie (envoyer le resultat d'une commande dans un fichier plustot qu'a l'ecran) :

... > chemin/fichier = envoie le resultat de la commande qui precede dans "fichier" en ecrasant le contenu deja present.

... >> chemin/fichier = envoie le resultat de la commande qui precede dans "fichier" a la suite du contenu deja present.

...| tee [-a] chemin/fichier = envoie le resultat de la commande qui precede dans "fichier" en ecrasant le contenu deja present ou en ajoutant a la suite du contenu present(option -a) ET affiche le resultat a l'ecran.

% ls -l | tee -a fichierTemp
% more fichierTemp