[Bash] Afficher un fichier sans les lignes de commentaires

Dernière mise à jour le 18 novembre 2009 à 19:43 par marlalapocket
Publié par jipicy
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
Meilleures réponses pour « Afficher un fichier sans les lignes de commentaires » dans :
[Windows/Corbeille] Supprimer un fichier sans confirmation VoirVous en avez assez de vider continuellement votre corbeille ? Il est possible de supprimer les fichiers sans passer par la corbeille de deux façons différentes : Méthode manuelle Méthode automatique Méthode manuelle Pour ne plus avoir à...
Comment lire un fichier ligne par ligne VoirComment lire un fichier ligne par ligne Préambule Boucle while Syntaxe Exemple Astuces Bonus Boucle for Syntaxe Préambule Une des erreurs les plus communes dans l'apprentissage des scripts "bash" sous GNU/LInux pour lire un fichier...
Afficher un fichier à l'envers VoirAfficher un fichier à l'envers Vous connaissez tous la commande "cat" qui sert à afficher un fichier (ou à en concaténer plusieurs). A partir de là, pour afficher un fichier à l'envers (en commençant par la dernière ligne et jusqu'à la...