# Certification Linux LPI/Administrateur système débutant/Examen 101/GNU et commandes Unix/Exécution de flux de textes en utilisant des filtres
## Objectifs

Description : Les candidats devraient être en mesure d'appliquer des filtres sur les flux texte (text streams). Ces taches incluent l'envoi de fichiers texte et de flux externes (output streams) à travers les filtres utilitaire texte (text utility filters) pour modifier ceux-ci, et utiliser les commandes standards UNIX issues des packages textutil GNU.
Fichiers, termes et commandes principaux inclus :

### wc
## Correspondance de chaîne et jokers

Le joker est un mécanisme de correspondance de chaîne pour la génération de noms de fichiers. L'objectif du joker est d'accroître la productivité : Localiser les fichiers dont vous ne vous souvenez pas. Localiser les fichiers qui ont quelque chose en commun. Travailler avec un groupe de fichiers plutôt qu'individuellement.
Le shell interprète ces caractères spéciaux :
Les caractères utilisés pour les jokers sont :
Si vous utilisez un caractère joker, le shell va essayer de générer un fichier. Essayez la commande suivante :

### Caractères joker spéciaux

Exemples :
Que font ces commandes?

## Shell et jokers

Une commande shell peut être une commande simple ou complexe.
La première activité du shell est d'interpréter les jokers. Seuls les jokers non protégés par des guillemets sont interprétés.

## Guillemets et commentaires
### Guillemets

Utiliser des guillemets pour que le shell n'interprète pas les caractères spéciaux et ne transforme plusieurs mots en commandes shell.
* 'chaîne' Presque tout dans les guillemets est littéral :
"chaîne" Comme 'chaîne' mais interprète $, \, !
L'antislash \ traite le caractère suivant comme littéral :
Comment afficher l'antislash ?

### Commentaires

Vous pouvez ajouter des commentaires sur une ligne de commande ou dans un script. Utiliser le caractère #. Un espace doit immédiatement précéder #.
Exemples :
Commandes
* cat, tac : concaténer des fichiers et afficher le résultat sur la sortie standard.
* head, tail : renvoyer sur la sortie standard la première (respectivement) la dernière partie des fichiers passés en argument.
* nl : renvoyer le nombre de lignes des fichiers passés en argument.
* wc : afficher le nombre de lignes, de mots et d’octets d’un fichier.
* cut : supprimer une partie de chaque ligne d’un fichier.
* tr : convertir ou éliminer des caractères.
* expand, unexpand : convertir les tabulations en espaces et espaces en tabulations.
* Paste : fusionner les lignes de deux fichiers.
* join : joindre les lignes de deux fichiers dans le même champ.
* uniq : supprimer les lignes en double dans un fichier trié.
* split : découper un fichier en plusieurs.
* fmt : formater simplement du texte.
* pr : convertir des fichiers texte pour l'impression.
* sort : trier les lignes d’un fichier texte.
* od : archiver les fichiers en octal et autres formats.
Concaténer des fichiers Pour concaténer des fichiers, utiliser cat.
Les résultats s'affichent sur la sortie standard (stdout).
options Courantes :
Exemples :
Pour concaténer les fichier à l’envers, utiliser tac. Présente le début et la fin du fichier
Pour voir seulement quelques lignes au début ou à la fin du fichier,
Les résultats comme toujours sont affichés sur la sortie standard (stdout).
Options Courantes :
Exemples :
Affiche les 10 dernières lignes de messages, actualise et vérifie s'il y a de nouvelles données toutes les 10 secondes.
Numéroter les lignes Pour ajouter les numéros de lignes à un fichier nl (numbering lines).
Options courantes :
Exemples :
Compter des occurrences dans un fichier
Pour afficher le nombre de lignes, caractères, mots dans un fichier, utiliser wc (word count).
Options courantes :
Exemples :
Couper des champs dans un fichier
Pour supprimer des sections de chaque ligne d’un fichier, utiliser cut (couper en anglais).
Options courantes :
Exemples :
Le délimiteur par défaut est TAB mais peut être changer avec l'option -d.

## Conversion de caractères

Pour transposer stdin vers stdout, utiliser tr.
Options courantes :
Exemples :
Pour convertir les tabulations en espaces, utiliser expand et pour convertir les espaces en tabulations, utiliser unexpand.

## Manipulation de lignes

Pour regrouper les lignes de différents fichiers, utiliser paste (coller en anglais).
Options courantes :
Exemples :
Pour fusionner les lignes des fichiers ayant un champ commun, utiliser join.
Pour supprimer les lignes dupliquées dans un fichier trié (lignes consécutives), utiliser uniq.
Options courantes :
Exemples :
Découper des fichiers
Pour découper des gros fichiers, utiliser split.
Options courantes :
Exemples :

## Formatage pour l'impression

Pour formater un fichier, utiliser fmt.
Options courantes :
Exemples :
Pour formater un fichier pour une imprimante, utiliser pr.
Options courantes :
Exemples :
Trier les lignes de fichiers textes Pour trier les lignes d’un fichier, utiliser sort.
Le résultat est affiché sur la sortie standard.
Options courantes :
Exemples :
Dump de fichier binaire Pour afficher le contenu d’un fichier binaire, utiliser od.
Le résultat est affiché sur la sortie standard et commence par une adresse offset en octal.
Options courantes :
Exemples :

## Exercices

* Utilisez les caractères jokers pour lister tous les fichiers dont le nom contient ’x’ suivit de ’in’ dans le dossier /etc.
$ ls -d /etc/{**/,}*x*in*
* Utilisez les caractères jokers pour lister tous les fichiers dont le nom commence par n’importe quel caractère entre ’a’ et ’e’, suivi d’au moins deux caractères et qui ne fini pas par un nombre.
$ ls -d {**/,}[a-e]?*[^0-9]
* Utilisez les caractères jokers pour lister tous les fichiers dont le nom contient exactement quatre caractères ainsi que les fichiers dont le nom commence par une majuscule. N’explorez par les sous-dossiers.
$ ls -d ???? [A-Z]*
* Utilisez les caractères jokers pour lister tous les fichiers qui contiennent ’sh’ dans le dossier /bin.
$ ls -d /bin/{**/,}*sh*
* Affichez votre variable d’environnement HOME précédée par la chaîne "la valeur de $HOME est : ".
$ echo "la valeur de \$HOME est : $HOME"
* Affichez votre variable d’environnement SHELL encadrée par deux astérisques de chaque coté.
$ echo "**$SHELL**"
* Comment afficheriez-vous la chaîne de caractères suivantes telle-quelle avec la commande echo, en vous servant de double guillemets " et d’anti-slash \ ?
$ echo "* @ # \$ % ^ & * ( ) ' \" \\"
* Utilisez la commande echo pour afficher les deux chaînes suivantes :
** C'est ce qu'il a dit !
** 'Plus jamais ça !' a-t-il répondu.
$ echo -e "C'est ce qu'il a dit "'!'"\n'Plus jamais ça "'!'"' a-t-il répondu."
* Affichez le nombre de mots dans tous les fichiers commençant par la lettre h dans le dossier /etc.
$ wc -w /etc/{**/,}h*
* Comment transféreriez-vous un fichier de 2 Mo avec deux disquettes de 1,44 Mo ? Comment rassembleriez-vous ces fragments en un seul fichier ?
* Quelle est la commande pour remplacer tous les séparateurs : dans le fichier /etc/password par le caractère # ?
$ sed 's,^\([^:]*\):\([^:]*\):,\1#\2#,' -i /etc/password
| Travailler en ligne de commande | Gestion de base des fichiers |