Category: Cours Unix


par Samantha
 

Les expressions régulières :

Elles servent à écrire de manière générique des chaînes de caractères qui ont des caractéristiques communes.

Comment peut-on écrire une url ? une date ? Elles permettent de décrire de manière concise des classes de chaînes de caractères. Cela passe par le repérage de motifs ou patron. Cela nous sert à localiser les zones qui nous intéressent. Cependant il est parfois difficile de définir le modèle.

\bmot\b

\bbiocarburant(s)\b

Les meilleurs outils de travail sur les données textuelles intègrent l’utilisation des expressions régulières. cependant la syntaxe des exp. régulières peut varier dans certains outils mais la syntaxe peut varier, mais le principe est touours le même.

Comment décrire des motifs d’expressions régulières ?

Ces motifs sont utiles pour chercher les chaînes de caractères qui nous intéresse. Il y a des caractères simples et aussi des caractères spéciaux (opérateurs).

. \ ^$ | () []

En général, les motifs sont assez complexes.

 

Les opérateurs complémentaires :

[…] signifie ensemble de caractères. ce qui est entre crochets correspond à 1 caractère.

r[iau]g  => ring, rang, rung

Chaîne de caractères alternatifs :

|

Exemple : in (any|every) => in any, in every

Les intervalles :

on vise un caractère compris dans l’intervalle entre crochets :

[0-9] => (0,1,2,3,4,5,6)

La négation  d’un ensemble de caractères :

[^…] porte une négatin sur les éléments constitutifs de l’ensemble situé entre crochets.

supprimer une balise HTML : <[^<>]> supprime tout ce qui est entre chevrons « supprime toutes chaînes de caractères qui est tout sauf des chevrons »

avec sed on lui donne substitute, il le remplace par rien.

sed -e « s/<[^<>]>// »

Les quantificateurs :

? signifie que le caractère qui précède est optionnel

arbres? => arbre; arbres

interest (s|(ed|ing)(ly)?)? => interest, interests, intersted, interestingly

* remplace n’importe quoi

 +        => as [a-z]+ as  => au moins une occurrence

marquer des répétitions {}

Le point peut marquer n’importe quel caractère sauf le retour à la ligne.

Les opérateurs de frontières :

^ => début de chaîne

$=> fin de chaîne

\w => caractère de mot, n’importe quel caractère alpha-numérique  ; \b\w+\b : permet de reconnaître beaucoup de mots, mais pas tous (pas les mots accentués par exemple)

\W => n’importe quel caractère non caractère de mot

\b => frontière d’un mot à gauche ou à droite

Le parenthésage :

Le parenthésage permet de construire des expressions complexes. La femeture est plus forte que la concaténation qui est plus forte que l’union.

* : caractère de fermeture qui s’applique à ce qui précède.

a|b(c*)d devient ((a| ((b(c*))d))

\ : déspécialise le caractère qui le suit.

voir le man de « egrep » qui présente des carctère d’expressions régulières intéressants.

Voir les opérateurs de Regex.

La commande egrep

filtrage de lignes dans un fichier qui correspond à des lignes et affichage des lignes concernées.

Options egrep : voir manuel

-l : ne pas tenir en compte majuscule et minuscule

-o : affiche toutes les occurrences reconnues du motif

-v : afficher les lignes qui ne contiennent pas les lignes vides.

Supprimer les lignes vides dans un fichier et de le mettre dans un fichier, le même fichier sans lignes vides.

egrep -v  » ^$ » toto.txt >totosansligne.txt

Par défaut egrep affiche la ligne contenant le motif . -o cherche le motif et affiche uniquement la chaîne de caractères reconnu, si il y a plusieurs fois le motif sur une même ligne il sera affiché plusieur fois.

egrep-o « \bcitoy\w+ »  => afficher tous les mots qui commencent par citoy dans le fichier.

|sort-u  => affiche les différentes formes du mot « citoyen, citoyens, citoyennes, citoyennes »

On peut faire une demande de requête élargie avec egrep.

 

par Samantha
 
 

Le retour curl donne 0 :

la commande a fonctionné, cependant, il y a des pages qui ne sont pas disponibles. on obtient des messages tels que « bad request », « oops! » « pages indisponibles ». Les serveurs ne veulent pas nous laisser aspirer les pages.

Il faudra s’assurer d’avoir un résultat et qu’on a récupérer un fichier existant. Il faut vérifier que le fichier contient toujours l’occurrence.

Il faut poser une condition if le code retour est égal à 0 et if le fichier contient bien l’occurrence du mot.

La commande Lynx :

On souhaite ajouter une commande supplémentaire pour ne garder que le contenu textuel de la page car curl récupère tout le codage html, on ne veut garder que le contenu textuel.

Lynx une commande unix qui est en fait un navigateur Web en ligne de commande comme firefox, internet explorer ou autre.Ce qui nous intéresse c’est une option qui s’appelle -dump pour duper, filtrer le text, il s’agit de filtrer le contenu textuel de l’url associé.

lynx-dump http://monsite.org

Il mémorise tous les liens présents dans la page en les numérotant entre crochets, et donne à la fin à quoi correspond le lien. L’option qui permet de ne pas avoir ces liens : -nolist, cela correspond mieux à ce qu’on recherche.

 

Il faut que toutes les sorties produites soient en UTF-8.  Il faut s’assurer que la page est dans le bon code, comment déterminer l’encodage de la pages aspirée.

Si c’est de l’UTF8 : alors on peut faire une extraction et le contenu sera maintenu.

si ce n’est pas de l’UTF alors il faut reconnaitre l’encodage de la page, éventuellement utiliser lynx pour voir la page et convertir la page en utf8. Il faut déterminer le charset de fichier en sortie

-display_charset (permet de spécifier dans quel encodage sera le lynx – dump.

-displpay_charset=UTF-8 permettra de récupérer une page en UTF8. Si la page est en UTF : lynx -dump -display_charset=UTF8

si la page n’est pas UTF8  il faut essayer de détecter l’encodage de la page.on précise les options de lynx -display_charset=UTF8 et ensuite en sortie convertir la page en UTF8. (voir option)

 

Comment connaître l’encodage d’une page ?

Commande : file  avec l’option -i file-i truc.html

Il nous faut connaître l’encodage de départ et l’encodage de sortie pour faire la conversion. Bien sûr on ne doit pas faire les traitement pour les pages qui ne donne sur rien.

 

à faire : Modifier le script pour :

1- si le retour curl nous donne une page qui ne donne sur rien, mettre en place une condition if pour que seule les pages existantes soient traitées.

2-  Insérer une colonne pour signaler le codage de départ du texte aspiré.

Tester si ce n’est pas en UTF8 convertir en UTF8 els

 

Cours du 9 novembre

Correction du script de création tableau :

On corrige le script qui sert à créer le tableau avec un numéro en face de chaque urls.

comment éviter d’avoir à écrire à chaque fois l’exécution du script.

Redirection entrante pour éviter d’écrire à chaque fois le nom de fichier entrant et le nom de fichier de sortie. On va mettre en place une astuce pour permettre au script d’aller directement récupérer les informations sasns que l’utilisateur n’ait à entrer les noms de fichiers.

On écrit de manière définitive dans un fichier les valeurs des entrées et sorties qu’on veut générer :

./URLS/url-biocarburant-fr.txt

./TABLEAUX/tableau-urls-fr-kh.html

que l’on nomme input.txt

On modifie le script fait tableau en supprimant les deux lignes echo :

read fic;

read tablo;

echo « Le nom du fichier html ou stocker ces liens $tablo »;

Lorsqu’on exécute le fichier on le fait suivre du nom du fichier de stockage. La première ligne du script ‘read fic’ va lire le nom du fichier stockage :

sh fait-tableau-version1-input.sh   <  sh input.txt

=> redirection de flux.

Point HTML : pour faire une liste entrer la balise <ol> et pour numéroter les ligne on utilise la balise <li> pour avoir des points, on utilise la balise <ul>

On peut peut pas utiliser ce codage pour numéroter les lignes d’urls.

On utilise un code qui compte les lignes grâce à une variable. Première ligne i=1 et ajouter 1 à chaque fois qu’on passe une ligne.Puis on affiche la valeur du compteur au moment ou j’écris la ligne.

echo « <tr><td>$i>/td></tr>>td>tr>$nom</tr></td>

Puis il faut incrémenter c’est à dire ajouter 1 à i pour chaque ligne.  i=i+1

<=>i+=1  : incrémentation et assignation à la fois.

let »i+=1 »

ou i=` expr $i+1`;

Point HTML :

<td><a href= »http.//lien.com »> url1</a></td>

Pour notre script, on veut tous les liens soient clicables.

On écrit  echo « <tr><td>$i</td></tr><td><tr><a href=\ »$nom\ »>$nom</a></tr></td>

\ »$nom\ » : affiche la valeur de $nom, donc l’url.

Comment traiter du même coup les deux fichiers d’urls ?

Dans la boucle en input  on va écrire read rep puisqu’il ne s’agit plus d’un fichier mais d’un répertoire de fichiers.

On change le fichier input :

./URLS

../TABLEAUX/tableau-urls-fr-kh.html

en écrivant read rep;

onveut dire au programme : pour chacun des fichiers de rep on veut que la boucle soit lue.

=> à ce stade tout est écrit dans un seul tableau donc on doit ajouter :

read tablo;

echo « <html><body> » >$tablo;

=>on aura autant de tableau que de fichiers.

On remet une boucle for fic in ‘ls $rep` => ls liste le contenu du répertoire.

Dans cette boucle for, on va pouvoir traiter 1 fichier

echo « <tableau> »>>$tablo;

cat : il faut reconstruire le chemin du fichier que l’on veut traiter. par rapport à l’endroit où l’on se trouve. pour accéder au fichier que l’on veut traiter c’est $rep et pour traiter le fichier c’est $fic

`cat  $rep/$fic`

Si on n’indique pas le chemin, le terminal va afficher Error : aucun fichier de ce nom, car on ne lui aura pas indiqué le bon chemin.

Cours du 2 novembre (suite)

Par Samantha -prise de notes en live

Première étape : script mot

cf : cours en ligne http://www.tal.univ-paris3.fr/cours/PROJETMOTSURLEWEB

Ecrire une programme pour récuperer les urls les mettre dans un tableau avec une numérotation.

Pour ce faire, on image que notre fichier d’url est un ensemble : pour chaque url x appartenant  au fichier d’url je veux qu’il apparaissent dans une ligne du tableau.

for x in X {

Il faut trouver un moyen pour pouvoir considérer notre fichier url comme un ensemble, pour pouvoir considère chaque élément de l’ensemble.

Astuce : Lorsqu’on fait un cat d’un fichier, le terminal affiche la liste des ligne du fichier. Il affichera la liste des url du fichier. Utiliser un cat du fichier permettra d’afficher à l’écran l’ensemble des url du fichier. Le retoure à la ligne va être le segmenteur et on pouvoir obtenir virtuellement un ensemble d’urls.

Pour la constitution de l’ensemble des urls on va récupérer le résultat d’une commande à la fenetre de commande. comme ensemble résultat de la boucle for on récupère le résultat de cat en utilisant « l’inverted quote’

for (x) in ‘cat $fic’

Read fic : le bash attend qu’on lui donne qqchse au clavier pour l’introduire dans la variable fic. Lorsqu’on veut invoquer la valeur du contenu de la variable, il faut le $.

si on écrit x= »url.txt »

echo $x on a url.txt

Si on veut afficher le contenu de la variable il faut utiliser le $

x= »serge »

echo « bonjour $x »

résultat : Bonjour serge

la variable garde la même valeur tant qu’on a pas changer son contenu par une affectation. Dès qu’on change son contenu la variable change.

Autre façon de faire des affectations :

read : affectation d’un valeur à une variable ( juste le nom pas le contenu)

fic : bien qu’il contienne le nom du fichier avec le chemin relatif, cela ne veut pas dire qu’il contient les chaine de caractères du fichier lui même. On donne à fic juste une valeur qui est une chaine de caractères.

read fic si on rentre url.txt si on fait echo $ fic ( permet d’accéder à la valeur de la variable)on nous donne url.txt

cat $fic : affiche le contenu du fichier fic qui est la variable. On va donc obtenir tout le conteu du fichier url.txt

les quotes inversés :`  `

on dit au shell d’exécuter la commande et de ramenr le résultat dans le ctxt de l’autre commande que l’on fait. signification : exécuter la commande et afficher son contenu.

CF. Doc : Premiers Scripts tableau de lien

Une boucle for pour indiquer à la machine d’aller elle même à chaque ligne d’url.

for nom in `cat $fic`

résultat : http://www.html

http://…&#8230;

{

echo « <tr><td> $nom</tr></td>

}

for fait une affectation à nom

après les accolades la boucle for ferme les balises. sur Ubuntu les accolades sont remplacée par do et done

Créer un script capable de prendre en entrée tous les fichiers urls, à lancer une seule fois

Par Samantha – prise de note en live

La balise <meta>;

très importante à renseigner. Lorsqu’on écrit la page, il faut enregistrer le document écrit sous notepade++ il faut l’enregistrer en UTF-8 et préciser dans la balise meta « content » UTF-8.

Lorsqu’on écrit une page dans quel encodage est-on ?

Utiliser la commande FILE

file(espace) -i nom du fichier : cette commande nous donne en quel charset on a écrit.

Toujours se demander dans quel encodage on écrit et comment le repérer.

Il y a une commande qui permet de convertir un encodage dans un autre : iconv

Ce n’est pas parce qu’on dit UTF-8 dans la balise méta que l’on est dans un encodage UTF-8

TOUT CE QUI DEVRA ETRE GENERE DEVRA ETRE CODE EN UTF-8 !

Commande Unix qui permet de savoir dans quel encodage on est  et aussi la localisation: locale

Schéma représentant la chaîne de traitement :

EXPLICATION :

extraction des URL : si la page est en UTF-8 on pourra extraire la page en utilisant la commande lynx.

si la page de l’url n’est pas codée en UTF-8 : il faudra trouver dans quel code est faite la page, la changer en UTF-8.

Bloucle : for > pour chaque éléments du tableau passage par l’encodage et traitement.

Un traitement supplémentaire pour compter les mots de la page de chaque url.

Le traitement doit être capable de construire des tableaux de tel sorte que pour chaque url le lien pointe vers la page, et montre quelle est son encodage.

Cours d’introduction au système d’exploitation Unix

Pour plus de détails se reporter au cours d’introduction à Unix sur i-campus, la plateforme de cours en ligne de l’Université Sorbonne Nouvelle Paris III.
N.B. : les notes ci-dessous sont mes notes de cours et ne reflètent que la compréhension que j’ai de ceux-ci, merci de me signaler toute erreur ou omission de ma part.

Quelques définitions :

Système d’exploitation (OS) : c’est un programme composé d’un ensemble de logiciels qui nous permet, grâce à ses fonctionnalités d’utiliser notre machine. Il existe plusieurs systèmes d’exploitation. Le plus connu du grand public c’est Windows dans toutes ses versions ( XP, Vista, 7,etc.). Il existe aussi deux autres grandes familles de systèmes d’exploitation connues : Macintosh d’Apple ( Mac OSX, OSX Lion, etc.), et Unix et ses bébés Linux, Ubuntu, Kubuntu, etc.

Nous allons travailler sous un système d’exploitation de la famille d’Unix : Ubuntu. C’est pourquoi ce cours s’intitule Introduction à Unix.

Unité centrale : c’est le cerveau de la machine. Il est constitué de plusieurs composantes ayant chacune leur fonctions. On distingue : – le disque dur , celui-ci permet le stockage et l’organisation  des fichiers. cet espace de stockage se présente sous forme arborescente dont le point de départ s’appelle la racine. Sous Windows C: ou D:, . Sous Unix, a racine est unique est ne se voit. il y a un seul noeud racine représenté par /.                                                                                                                   – la RAM  ou mémoire vive : c’est là que sont stockées toutes les données non sauvegardées. C’est cette composante qui est responsable des différence de prix d’une machine à l’autre.                                                                                                                          – le processeur et la carte graphique.

Répertoire : un répertoire et un conteneur. Il peut contenir d’autres répertoires et des fichier. C’est une position dans l’arbre.

Fichier : il contient une information d’une quelconque nature.

Pour faire de la programmation il faut ouvrir le Terminal (Applications>Accessoires>Terminal). C’est une fenêtre noire à travers laquelle on va naviguer, donner des ordres, créer, effacer, organiser, notre travail sous Ubuntu.

Pour ce faire il faut connaître un certain nombre de commandes.

Dans l’article suivant, vous aurez un aperçu des fonctionnalités et un descriptifs de quelques commandes d’usage fréquent sous Ubuntu.

Sam