Commandes Unix

Quelques explications basiques sur les commandes utilisées pour écrire le script (en retraçant doucement les étapes et problèmes évités) :


 Commande Description
read read from a file descriptor
echo display a line of text
mkdir make directories
curl transfer an URL
-o write output to 'file'
egrep print lines matching a pattern
-i ignore case distinctions in both the PATTERN and the input files
-o print only the matched (non-empty) parts of a matching line, with each such part on a separate output line
-c suppress normal output; instead print a count of matching lines for each input file
file determine file type
-b do not prepend filenames to output lines (brief mode)
--mime-encoding causes the file command to output mime type strings and print only the specified element(s)
lynx a general purpose distributed information browser for the World Wide Web
-dump dumps the formatted output of the default document or those specified on the command line to standard output
-nolist disable the link list feature in dumps
-display_charset=MIMEname set the charset for the terminal output
cat concatenate files and print on the standard output
iconv convert encoding of given files from one encoding to another
-f encoding convert characters from encoding
-t convert characters to encoding if not specified the encoding corresponding to the current locale is used
-o file specify output file (instead of stdout)
sort sort lines of text files
-u output only the first of an equal run
mv mv SOURCE DEST
 Rename SOURCE to DEST


  • <meta content=\"text/html\" charset=\"utf-8 \"/>

Ceci n'est pas une commande mais une balise de méta-données qui donne des informations sur l’encodage de la page : c’est de la méta description, pas de la programmation !

Mais il est nécessaire de donner une balise méta pour transmettre au navigateur l'encodage de notre ficher...


  • echo :

Il est possible de rediriger le flux de sortie, et donc le canal de sortie ne serait plus l'écran mais, par exemple, un fichier.

echo "blah" > toto.txt = le flux de sortie de la commande est redirigé vers le fichier du dossier courant nommé "toto.txt" (créé à l'occasion s'il n'existait pas auparavant).

/!\ Le fichier sera écrasé, c'est-à-dire que tout le contenu sera remplacé par le contenu du flux de sortie.

echo "blah" >> toto.txt = le flux de sortie de la commande echo est redirigé du terminal vers le fichier. Le double chevron permet de ne pas écraser le fichier ; le contenu de la commande sera concaténé à la fin du fichier.


  • cat :

cat permet ici d'afficher l'ensemble des urls de notre fichier, uniquement parce qu'on a une url par ligne, donc... la ligne devient ici le critère segmenteur !

Nous avions uniquement un fichier d'url, en considérant la liste d'url comme un ensemble, nous avons maintenant un ensemble d'url !


  • cut :

permet d'extraire des colonnes dans un fichier donné.

cut -f : définit les colonnes qui nous intéressent

cut -d : spécifie les marqueurs de colonne (ou délimiteurs de colonne)


  • wget -O ou son équivalent curl -o (que nous avons favorisé) :

permet de traiter notre fichier d'url : on aspire chaque page html via son url et on la stocke dans le tableau qui s'en trouve enrichi.

L'avantage de curl c'est qu'il fournit un rapport d'erreur, mais attention :

    - le retour d'erreur de curl marchera toujours mais ne garantit pas la récupération du contenu de la page si celle ci est verrouillée !

    - pour éviter d'obtenir une "Bad request" (c'est-à-dire un fichier pour lequel il est inutile d'insister : la requête est donnée directement par le serveur), il faut s'assurer de deux choses :

      - que le code retour de curl = 0

      - et condition supplémentaire : que le contenu corresponde à nos attentes.


  • lynx -dump :

permet de récupérer le contenu des pages html en format .txt : notre tableau s'en trouve enrichi davantage !


  • egrep :

Commande de filtrage qui va chercher une chaîne de caractère dans un fichier. Grâce à elle, on épure les pages dumpées avec le mot et son contexte : nous avons un tableau super enrichi.

Quelques options d'egrep :

-c : permet de compter les lignes contenant le motif

-v : permet d'afficher les lignes ne contenant pas le motif

-n : chaque ligne contenant le motif est précédée de son numéro dans le fichier

-i : évite la casse, pas de distinction min/MAJ

-o : affiche toutes les occurrences reconnues du motif


# Par exemple, pour virer les lignes vides d'un fichier :

egrep –v "^$" toto.txt > totosanslignevide.txt

« La vie est simple, parfois » SF


  • file -i :

permet de donner l'encodage d'un fichier. On a ici une petite difficulté :

le résultat de la commande file -i est produit par le terminal, on doit donc récupérer la chaîne de caractère contenue dans la réponse à l'aide d'une RegExp.


  • iconv :

permet de transférer un fichier d'un encodage dans un autre.


Expressions régulières

Petit rappel sur les expressions régulières et leurs opérateurs :



Example pic



  • Pour traiter une expression régulière, on utilise la commande de filtrage :


egrep [option] "motif" fichier



  • Concernant le motif à traiter :


egrep "bla" toto.txt

egrep "^L" fichier (^ : début de ligne - ici qui contient une MAJ)

egrep "es$" fichier ($ : fin de ligne /!\ contextuel ! si textuel, désigne la fin de la séquence texte)

egrep "a.me" fichier (. : n'importe quel caractère)

egrep "am+e" fichier (+ : le caractère précédent reproduit une ou plusieurs fois)

egrep "es*,$" fichier (* : le "s" n'est pas obligatoire)

egrep "es?,$" fichier (? : la dernière occurence - ici, le "s" - reproduite ou non)

egrep "^[LN]" fichier ([ ] : soit l'un, soit l'autre, soit l'ensemble)

[a-z] : désigne l'ensemble des minucules

[a-zA-Z] : désigne l'ensemble des caractères en fonction de la locale

egrep "[^0-9]" fichier ([^ ] : a une valeur de négation - ici, tout sauf un chiffre)

egrep "^[^LN]" fichier (ici, on veut tout sauf L ou N en début de ligne)

egrep "eaux$|res$" fichier (lignes qui se terminent par -eaux ou -res)

egrep "\.$" fichier (\ : réattribue caractère DONC ici, lignes qui se terminent par ".")



  • Opérateurs de base:


\b : début/fin de mot

"\bL" : mot qui commence par "L"

"es\b" : mot qui finit par "es"

"\bL.+es\b" /!\ très dangereux (.+ désigne n'importe quel caractère reproduit une ou plusieurs fois)

"\bL\B+es\b" : petit exercice à décrypter !

\B : dans le mot

\w : n'importe quel caractère alphanumérique

\W : tout ce qui n'est pas un caractère alphanumérique



  • Quelques exemples d'options :


-i : ne distingue pas min/MAJ

-c : affiche un décompte des lignes comprenant le motif recherché

-n : chaque ligne qui contient le motif est précédée de son numéro dans le fichier

-v : affiche les lignes qui ne contiennent pas le motif

-o : affiche uniquement ce qui a été reconnu (et pas la ligne entière)



Outils :

Liens :