sed et awk

Transformer du texte en ligne de commande : la substitution et les adresses de sed, les champs, les motifs, BEGIN, END et les sommes d'awk.

  • 29 cartes
  • 5 thèmes
  • Gratuit

Le programme, thème par thème

Le poids de chaque thème suit celui que lui donne l'examen.

  1. Notions
  2. Questions
  3. Ranger et relier
  4. Mises en situation
  5. Comprendre

Quelques cartes du deck

  • sed : de quoi s'agit-il ?

    Voir la réponse

    Éditeur de flux qui lit un texte ligne par ligne, applique à chacune des commandes (substituer, supprimer, afficher) et écrit le résultat sur sa sortie.

    Il ne modifie pas le fichier lu : sans -i, le résultat va sur la sortie standard. La commande la plus courante est s/motif/remplacement/.

  • Qu'affiche cette commande ?

    ```bash
    echo 'a-b-c' | sed 's/-/+/2'
    `

    • a-b+c
    • a+b-c
    • a+b+c
    • a-b-c+
    Voir la réponse

    a-b+c

    Le nombre à la fin de s désigne l'occurrence à remplacer : le deuxième tiret devient +, la première reste. Sans nombre, c'est la première ; avec g, toutes.

  • Dans sed, la commande s/a/b/ ne remplace que la première occurrence de chaque ligne ; pour les remplacer toutes, on ajoute le drapeau ….

    Voir la réponse

    Dans sed, la commande s/a/b/ ne remplace que la première occurrence de chaque ligne ; pour les remplacer toutes, on ajoute le drapeau g.

    echo a-b-c | sed 's/-/+/' donne a+b-c et avec g a+b+c. Un nombre à la place, comme s/-/+/2, vise la deuxième occurrence : a-b+c.

  • awk : de quoi s'agit-il ?

    Voir la réponse

    Langage de traitement de texte qui découpe chaque ligne en champs et exécute une action sur celles qui répondent à un motif.

    Un programme est une suite de motif { action }. Sans motif, l'action vaut pour toutes les lignes ; sans action, la ligne est affichée.

  • Le remplacement sed 's/usr/sbin/bin/' chemins.txt échoue avec « unknown option to s ». Quelle correction est juste ?

    • sed 's#usr/sbin#bin#' chemins.txt
    • sed 's/usr/sbin/bin/g' chemins.txt
    • sed -n 's/usr/sbin/bin/' chemins.txt
    • sed 's/usr/sbin/' chemins.txt
    Voir la réponse

    sed 's#usr/sbin#bin#' chemins.txt

    Les barres obliques du chemin sont lues comme des séparateurs de s : sed y trouve trop de parties et prend bin/ pour un drapeau. On change le séparateur, ici #, ou on protège chaque barre par \. g et -n n'y changent rien.