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

Guérin Maximilien - L5T51 Exercices