Grep, tout ce qui ne commence pas par #

Hello,

Je m’arrache les cheveux làdessus depuis 30 mn, je voudrais savoir comment faire en sorte de lister toutes les lignes d’un fichier qui ne commencent par par # (typiquement, pour épurer un fichier de conf…).

J’ai essayé plein de combinaisons, sans succès…
merci

Bonjour,

grep “#” ton-fichier : liste toute les lignes contenant le dièse
grep “^#” ton-fichier : liste toute les lignes commençant par dièse
grep -v “#” ton-fichier : liste toute les lignes ne contenant pas le dièse
grep -v “^#” ton-fichier : liste toute les lignes ne commençant pas par dièse

Merci, par contre, ça me sort le fichier avec toutes les lignes qui ne commencent pas par dièse, en revanche les lignes sont toujours présentes, j’entends par là que les lignes commençant par dièse ont été remplacée par des lignes vides :\

grep -v “^#” fichier | grep -v “^$”

En fait je venais de trouver ceci : grep -E -v ‘^(#|$)’

qui fait exactement ce que je souhaite. Donc en gros, $ représente les lignes vides ?

Merci à tous deux :slightly_smiling:

Non $ c’est la fin de ligne.

Non, $ représente la fin de ligne. Une ligne vide c’est ^$ (^ est le début d’une ligne).

^(#|$) signifie donc : début de ligne suivi soit de # soit de la fin de ligne.

Pour mémoire, quand tu utilises l’option -E tu passes en mode “expressions régulières étendues” qui ressemble beaucoup aux expressions Perl (contrairement au mode par défaut qui est beaucoup plus limité).

(et fran.b est passé avant moi :stuck_out_tongue:)

merci pour ce complément d’info :wink:

C’est quand même vicieux un linuxien… :laughing: … une ligne vide est une ligne qui commence par la fin!!! :laughing: :laughing: :laughing:
(une ligne est vide si son premier caractère est une fin de ligne… :unamused: )

(oui bon… ça va… je -> … je -> … :stuck_out_tongue: )

Et j’en, ai profité pour le mettre dans le wiki… :wink:

beronono.com/wiki-debian/index.p … nt.C3.A9es

Blagues mises à part…

Il s’agit en réalité d’un ancrage : ça ne correspond à aucun caractère en particulier mais uniquement à une position (de même que pour le début de ligne où c’est beaucoup plus facilement compréhensible).
Donc, pour être précis : une ligne vide est une ligne ne contenant rien du tout entre son début ^ et sa fin $.

/pinaillage

[pinaillage]
Et le “retour chariot”… tu le mets où dans ton explication… “ça ne correspond à aucun caractère en particulier”… :unamused: … pourtant… il existe!!! :laughing:
[/pinaillage]

Du point de vue de l’expression régulière, il ne fait pas partieb[/b] de la ligne à proprement parler.
C’est ce qui permet de s’affranchir d’un séparateur de ligne en particulier : une expression grep contenant $ fonctionne aussi bien avec les retours chariots qu’avec la fin de fichier, et même avec les caractères nuls si l’option -z (–null-data) a été spécifiée.

b[/b] d’où le terme de séparateur de ligne : il les sépare mais n’en fait pas partie.

J’avais mal compris ton propos… merci pour ces précisions… :wink: