Bash - Afficher un fichier sans les lignes de commentaires

Décembre 2016

Il est parfois utile d'afficher un fichier sans pour autant afficher la myriade de lignes de commentaire l'accompagnant (en particulier pour les fichiers de configuration de notre OS préféré ;-) ), ainsi qu'en le délestant de ses lignes vides.

Voilà trois façons de procéder.


Grep


La 1ère à l'aide de "egrep" (ou "grep -E"):
egrep -v '^(#|$)'  /etc/samba/smb.conf

grep -E -v '^(#|$)'  /etc/samba/smb.conf
Là l'exemple se contente de ne pas afficher toutes lignes commençant par un dièse (#) ou par le caractère de contrôle de fin de ligne dollar ($).

S'il s'avérait que le délimiteur de commentaires soit placé non pas en début de ligne mais en retrait (espace ou tabulation), ou que le fichier mêle d'autres caractères délimiteurs comme le point virgule (;), rien ne vous empêche d'embellir votre expression rationnelle comme suit :
grep -E -v '^(#|;|$|[ ]*#)' /etc/samba/smb.conf

Sed


La seconde à l'aide de "sed" :
sed -e '/^[ ]*#/d' -e '/^$/d' /etc/samba/smb.conf
On élimine en premier les lignes commençants par un espace ou un signe dièse, puis on élimine toutes les lignes vides.

Bien entendu comme dans l'exemple précédent vous pouvez étoffer votre commande en incluant d'autres motifs, comme le point virgule, ce qui donnerait :
sed -e '/^[ ]*#/d' -e '/^[ ]*;/d' -e '/^$/d' /etc/samba/smb.conf

Perl


La troisième à l'aide de "perl" :

En fait il s'agit toujours des regex, c'est l'utilitaire qui change.
Qu'il s'agisse de grep, egrep, sed, python, perl, etc. c'est toujours la regex qui fait l'affaire.
Il nous reste seulement à étudier l'implémentation des regex et le moteur utilisé par les utilitaires.
A savoir par exemple qu'un moteur DFA - Deterministic Finite Automation - est plus rapide qu'un moteur NFA - Nondeterministic Finite Automation - .
En revanche le moteur NFA nous permet de mieux peaufiner et diriger la regex pour obtenir le résultat voulu, donc un environement de créativité qu'on ne trouve pas avec un moteur DFA.
perl -ne 'print unless /^\s*[;\$#]|^$/' fichier_config

Les commandes sed et grep utilisent la syntaxe des expressions régulières. Vous pourrez trouver des compléments d'information pour vous familiariser avec cette notion à cette adresse :
phpreg

A voir également :

Ce document intitulé «  Bash - Afficher un fichier sans les lignes de commentaires  » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.