cClaude.rocks ☕ Le blog

[Nouvelles technologies, sciences et coups de gueule…]

Menu

sed est un éditeur similaire à vi mais permettant l’édition de fichier automatisée.

Comment ajouter un saut de ligne après un motif donné avec sed

Un cas d’usage typique pour cette astuce est lorsqu’on souhaite lire le contenu d’un fichier minimiser dont tout le contenu se trouve sur une seule ligne.

Si cela permet de limiter l’usage de la base passante, ce n’est pas très lisible. Si vous utiliser un éditeur prenant en charge la coloration syntaxique et l’analyse du code, cela peut même être un cauchemar suivant la taille du fichier, en effet certains éditeurs vont utiliser beaucoup de ressources pour ce type de fichier.

Par exemple, dans le cas d’un fichier CSS on sait que chaque instruction doit se terminer par un point virgule. Il suffit dont d’ajouter un saut de ligne après le caractère ; (point virgule).

On peut rendre aisément le fichier lisible à l’aide de la commande :

sed 's/;/&\n/g' fichier.min.css >fichier.css

Cela ne donnera pas une belle indentation, comme certain IDE savent le faire, mais c’est compréhensible et vous trouverez certainement d’autre cas d’usage.

  • sed : Éditeur en ligne
  • 's/;/&\n/g' : Commande de remplacement [détail ci-dessous]
    • s : Indique une action de recherche (search)
    • / : séparateur
    • ; : Le motif à rechercher, ici c’est juste le caractère ';'
    • / : séparateur
    • &\n : Par quoi sera remplacé le motif [détail ci-dessous]
      • & : Indique que le motif trouvé doit être gardé dans le résultat à cette position
      • \n : Après le motif, ici on veut un saut de ligne
  • / : séparateur
  • g : Indique une action de remplacement global
  • fichier.min.css : Le fichier initial
  • > : redirige le résultat vers un fichier
  • fichier.css : Le nouveau fichier

Pour vous aider à comprendre voici un second exemple, ici on insère un saut de ligne avant le motif :

cat <<EOF | sed 's,ligne2,\n&,g'
ligne1
ligne2
ligne3
EOF

Explication en trois parties :

Partie 1 :

D’abord ce qui concerne le remplacement, puisque c’est le sujet de ce billet.

  • sed : Éditeur en ligne
  • 's,ligne2,\n&,g' : Commande de remplacement [détail ci-dessous]
    • s : Indique une action de recherche (search)
    • , : séparateur
    • ligne2 : Le motif à rechercher
    • , : séparateur
    • \n& : Par quoi sera remplacé le motif [détail ci-dessous]
      • \n : Saut de ligne
      • & : Réinsère le motif dans le résultat à cette position
  • , : séparateur
  • g : Indique une action de remplacement global

Partie 2 :

La syntaxe de cat:

En général, on utilise cat suivit d’un nom de fichier pour afficher son contenu

Mais de base la commande cat ne fait pas grand-chose, elle prend une entrée et la réécrit à l’identique, par exemple, les instructions :

ls -l --color=never | cat

Est identique à :

ls -l --color=never

On peut à l’aide de l’opérateur << changé l’entrée de la commande. Pour cela il faut faire suivre l’opérateur d’un motif qui devra être répété sur la dernière ligne.

cat <<MON_MOTIF
Trop cool
Je peux même avoir une ligne avec juste EOF:
EOF
et là on est à la fin
MON_MOTIF

ce qui affichera :

Trop cool
Je peux même avoir une ligne avec juste EOF:
EOF
et là on est à la fin

Partie 3 :

La redirection de cat vers une autre commande, ici sed:

La syntaxe suivante permet d’afficher le fichier et passe le résultat à la commande less qui affichera le fichier page par page :

cat fichier | less

Et dans notre cas, c’est en fait la même chose :

cat EOF | N-IMPORTE-QUELLE-COMMANDE-QUI-TRAITE-LE-RÉSULTAT-DE-CAT | ÉVENTUELLEMENT-UNE-AUTRE-COMMANDE
ligne1
ligne2
ligne3
EOF

ᦿ


ℹ 2006 - 2021 | 🏠 Retour à l'accueil du domaine | 🏡 Retour à l'accueil du blog