Table of Contents

Expressions régulières

Recherches simples dans un fichier de conf

  1. extraire les lignes du fichier /etc/services contenant la chaîne name

    réponse

    grep name /etc/services
  2. extraire les lignes du fichier /etc/services commençant par la chaîne microsoft

    réponse

    grep ^microsoft /etc/services
  3. extraire les lignes du fichier /etc/services contenant les 2 chaînes tcp et 19 dans cet ordre

    réponse

    grep 'tcp.*19' /etc/services

Recherches diverses dans un dictionnaire de mots

Le fichier words (/usr/share/dict/words) contient un mot par ligne. Faire les recherches suivantes dans ce fichier à l'aide de grep :

  1. extraire les mots commençant par un j

    réponse

    grep '^j' /usr/share/dict/words
  2. extraire les mots finissant par nix

    réponse

    grep 'nix$' /usr/share/dict/words
  3. extraire les mots commençant par K et finissant par k

    réponse

    grep '^K.*k$' /usr/share/dict/words
  4. extraire les mots commençant ou finissant par aa

    réponse

    grep '^aa|aa$' /usr/share/dict/words
  5. extraire les mots commençant par un y, minuscule ou majuscule

    réponse

    grep '^[yY]'
  6. extraire les mots d'au moins 10 lettres

    réponse

    grep '..........'
    grep -E '.{10}'
  7. extraire les mots de 10 lettres

    réponse

    grep '^..........$'
    grep -E '^.{10}$'
  8. extraire (en un seul grep) les mots de 4, 5 et 6 lettres

    réponse

    egrep '^.....?.?$                         # egrep ≡ grep -E
    egrep '^.{4,6}$'
  9. extraire (en un seul grep) les mots de 16, 21 et 26 lettres

    réponse

    egrep '^.(.....){3,5}$'
  10. extraire les mots contenant au moins 4 a

    réponse

    grep 'a.*a.*a.*a'
    egrep '(a.*){4}'
  11. extraire les mots contenant exactement 3 z

    réponse

    grep '^[^z]*z[^z]*z[^z]*z[^z]*$'
    egrep '^([^z]*z){3}[^z]*$'
  12. extraire les mots ne contenant pas uniquement des lettres

    réponse

    grep '[^a-zA-Z]'
  13. extraire les mots commençant par un doublon (2 lettres identiques consécutives)

    réponse

    egrep '^(.)\1'
  14. extraire les mots commençant et finissant par la même lettre

    réponse

    egrep '^(.).*\1$'
  15. extraire les palindromes de 7 lettres

    réponse

    egrep '^(.)(.)(.).\3\2\1$'
  16. extraire les mots contenant un triplet (3 lettres consécutives identiques)

    réponse

    egrep '(.)\1\1'
  17. extraire les mots dédoublables, comme bobo, poussepousse

    réponse

    egrep '^(.{2,})\1$'
  18. extraire les mots contenant 3 occurences d'un même doublon, comme successlessness

    réponse

    egrep '((.)\2).*\1.*\1'
  19. extraire les mots contenant au moins 6 occurrences d'une même voyelle

    réponse

    egrep '([aeiouy])(.*\1){5,}'
  20. extraire les mots contenant 2 occurences d'un même doublon de voyelles, comme schoolbooks

    réponse

    egrep '(([aeiouy])\2).*\1'

Transformation de texte

Utiliser sed ou vi pour répondre aux questions ci-dessous :

  1. lister les logins (et seulement les logins) déclarés dans /etc/passwd

    sed

    sed 's/:.*$//' /etc/passwd

    vi

    1,$s/:.*$//
  2. transformer tous les @ en (at) contenus dans un fichier donné

    sed

    sed 's/@/(at)/g

    vi

    1,$s/@/(at)/gc  # c demande de confirmation avant chaque remplacement
  3. supprimer les numéros de lignes d'un fichier du type des corrigés de ce wiki

    sed

    sed 's/^ *[0-9][0-9]*: *//'
    sed -r 's/^\s*[0-9]+:\s*//'    # -r pour exploiter les RE étendues

    vi

    1,$s/^ *[0-9][0-9]*: *//