Pipes,
jokers et redirections
La commande cat
1. Comment visualiser deux fichiers l'un après l'autre à l'aide de la commande cat ?
cat fichier1 fichier2
2. Comment faire une copie d'un fichier sans utiliser cp ni ouvrir d'éditeur de texte ?
less fichier > copie
3. Utiliser cat pour écrire un peu de texte et mettre le résultat dans un fichier notes.
cat > notes
voici un peu de texte
4. Quelle différence y a-t-il entre "cat bla blo > blu" et "cat bla blo >> blu" ? Que se passe-t-il, pour chaque ligne, selon que le fichier blu existe ou n'existe pas ?
Si blu n'existe pas : Pas de différence.
Si blu existe :
cat bla blo > blu : blu va être remplacé par bla blo
cat bla blo >> blu : bla blo va se mettre à la fin de blu
5. Comment obtenir un fichier blo qui corresponde à un fichier bla dont les lignes seraient désormais numérotées ?
cat -n bla > blo
Jokers et expressions régulières
1. Vous avez chez vous des fichiers appelés essai1, essai2, essai3 et essai4. Comment les effacer en une seule ligne de commande ?
rm essai1 essai2 essai3 essai4
2. Dans mon répertoire d'accueil, j'ai un certain nombre de fichiers avec un suffixe .c. Je désire les regrouper dans un répertoire que j'appelerai C/. Quelles sont les commandes que je dois taper ?
mkdir C/
mv *.c C/
3. Vous désirez regrouper dans un répertoire Rangement les fichiers dont le nom contient un caractère minuscule suivi d'un caractère majuscule. Quelle(s) est/sont la/les commande(s) à donner ?
mkdir Rangement/
mv *[a-z][A-Z]* Rangement/
4. Même chose avec les fichiers dont le nom contient trois voyelles à la suite.
mkdir Rangement/
mv *[aeiouy][aeiouy][aeiouy]* Rangement/
5. En utilisant ls et grep, affichez la liste des fichiers dans /bin dont le nom :
* Commence par «a» et dont la deuxième lettre est «s» ou «t»;
ls /bin | grep ^a[st]
* Contient «un» et se termine par «t»;
ls /bin | grep un.*t$
* Contient «gre» ou «st».
ls /bin | grep -e gre -e st
* Contient exactement deux lettres «m»;
ls /bin | grep ^[^m]*m[^m]*m[^m]*$
* Contient au moins deux lettres «m»;
ls /bin | grep .*m.*m.*
* Contient au moins quatre caractères et aucun chiffre;
ls /bin | grep ^[^0-9]*[A-Za-z][^0-9]*[A-Za-z][^0-9]*[A-Za-z][^0-9]*[A-Za-z][^0-9]*$
* Est constitué de deux lettres exactement;
ls /bin | grep ^[A-Za-z][A-Za-z]$
* Commence et finit par un chiffre.
ls /bin | grep ^[0-9].*[0-9]$
6. Comment éliminer les lignes vides dans un fichier ?
grep -v ^$ fichier
Comment éliminer les lignes ne contenant que des blancs ?
grep -v ^[^A-Za-z0-9]*$ fichier
Exercices sur Germinal
1. Combien de fois le mot «mine» apparaît dans chaque chapitre de la première partie de Germinal ?
cat zola1.txt | egrep -o mine | wc -l
6
cat zola2.txt | egrep -o mine | wc -l
2
cat zola3.txt | egrep -o mine | wc -l
10
cat zola4.txt | egrep -o mine | wc -l
9
cat zola5.txt | egrep -o mine | wc -l
5
cat zola6.txt | egrep -o mine | wc -l
9
2. Combien y a-t-il de lignes blanches dans zola1.txt ?
grep ^[^A-Za-z0-9]*$ zola1.txt | wc -l
81
head et tail
1. Affichez les 15 premières lignes du fichier /etc/hosts,
head -n 15 /etc/hosts
Les 15 dernières lignes,
tail -15 /etc/hosts
Toutes les lignes à partir de la quinzième,
tail +15 /etc/hosts
Les lignes 15 à 20.
tail +15 /etc/hosts | head -6
2. Récupérer les lignes 5 à 9 d'un fichier de 12 lignes.
tail +5 fichier | head -5
3. Comment afficher la cinquième ligne d'un fichier ?
tail +5 fichier | head -1