Supprimer les lignes commençant par #

10

Comment supprimer des lignes commençant par un #, étant donné qu'il peut y avoir des espaces à gauche et à droite de #?

  # Master socket provides access to userdb information. It's typically
chris4000
la source

Réponses:

13

Cela semble fonctionner, mais je n'y ai pas longuement réfléchi:

sed -e '/^[[:space:]]*#/d'
Ulrich Schwarz
la source
10

Vous pouvez utiliser greppour cela

grep -vh '^[[:space:]]*#' filename

Comme, comme je le suppose, vous supprimez les commentaires d'un fichier, vous pouvez également envisager de supprimer les lignes vides, ce qui étend ce qui précède à:

grep -vh '^[[:space:]]*\(#\|$\)' filename
rozcietrzewiacz
la source
3

awk la solution consiste à inverser la correspondance de votre motif.

$> cat ./text
elephant
# Master socket provides access to userdb information. It's typically
zoo
 #ok
penguin
# !

$> awk '!/^(\ )*#/ {print $0}' ./text
elephant
zoo
penguin
ДМИТРИЙ МАЛИКОВ
la source
4
Pas besoin d'échapper au caractère d'espace, pas besoin de saisir le caractère d'espace, pas besoin de spécifier l'action par défaut: awk '!/^ *#/' ./text.
manatwork
awk '/^ *#/{next}1' filedevrait être assez bon.
jaypal singh
0
perl -ne 'print if ! /^\s*#/' ./text
Peter John Acklam
la source
salut @ Peter-john-acklam, est-ce que cela fonctionnerait lorsque le code est suivi de # comment?
Nikhil Mulley
0

En utilisant les données d'exemple publiées par ДМИТРИЙ МАЛИКОВ ...

$ grep -vPh '^\s*#' filename.txt | grep -Po '\w+'
elephant
zoo
penguin

Je préfère utiliser pcre avec grep donc j'utilise le commutateur -P pour grep (doit être GNU grep). Le deuxième grep est du sucre pur pour vous donner les mots sans espace blanc. Cela "supprimerait" également les lignes vides.

Jim
la source
-1
$ perl -pi -e '$_="" if /^\s*#/' filename
Zaid
la source
Ce n'est pas bon - ne supprime pas les lignes et efface les lignes commea#b
Mat