Voilà trois façons de procéder.

  • Grep
  • Sed
  • Perl

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*[;\$#]|^$/' /etc/samba/smb.conf

Liens