Comment grep des lignes qui ne commencent pas par “#” ou “;”?


78

Je veux grep smb.confet ne voir que les lignes qui ne sont pas commentées.


1
testparmmieux le faire car cela affiche aussi les valeurs par défaut.
— F. Hauri

@ F.Hauri Merci. cela fonctionne aussi bien. Mais il s'agit également de produire des informations inutiles (dans mon cas), qui devraient également être récupérées ...
— denys


Une autre manière de passer par PCRE grep stackoverflow.com/a/45917459/3297613
— Avinash Raj

Réponses:


125
grep "^[^#;]" smb.conf

Le premier ^fait référence au début de la ligne, donc les lignes avec des commentaires commençant après le premier caractère ne seront pas exclues. [^#;]signifie tout caractère qui n'est pas #ou ;.

En d'autres termes, il signale les lignes qui commencent par tout caractère autre que #et ;. Ce n'est pas la même chose que de rapporter les lignes qui ne commencent pas par ( #et ;pour lesquelles vous utiliseriez grep -v '^[#;]'), cela exclut également les lignes vides , mais c'est probablement préférable dans ce cas car je doute que vous vous préoccupiez des lignes vides.

Si vous voulez ignorer les caractères vierges, vous pouvez le changer en:

grep '^[[:blank:]]*[^[:blank:]#;]' smb.conf

ou

grep -vxE '[[:blank:]]*([#;].*)?' smb.conf

Ou

awk '$1 ~ /^[^;#]/' smb.conf

La bonne réponse est: cat /etc/samba/smb.conf | grep ^[^#\;]mais de toute façon merci
— denys

Ouais, ou vous pouvez utiliser "guillemets"; Je l'ai édité par la suite.
— goldilocks

7
@denys Vous avez tort: ​​la réponse de goldilocks n’est pas pire que la vôtre. .1 Veuillez éviter d'utiliser la cat ...| syntaxe !. .2 Pour fouetter les lignes vides ET les lignes ne contenant que des espaces, peut-être avec des commentaires, vous pourriez utiliser ceci:grep -v "^ *\(#.*\|\)$" < smb.conf
— F. Hauri

7
@ EmmanuelBerg C'est une fourchette inutile. cat file | grep "blah"Cela implique d'exécuter deux fichiers binaires via un fifo , tout en faisant grep "blah" <fileexactement la même chose et en se liant file naturellement à grep STDIN. [bash] chat inutile est un sujet de recherche complet, quel que soit le moteur de recherche utilisé! -> blog.sanctum.geek.nz/useless-use-of-cat ... for sample
— F. Hauri

2
Cela ne fait pas exactement la même chose . Il crée 2 processus et un tuyau où 1 processus suffit. Lisez le lien donné dans le dernier commentaire de @ F.Hauri.
— Rahmu

4

Solution Vim:

:v/^\s*[#\n]/p

Je suis tombé sur cette question en essayant de trouver la solution vim moi-même.


1
Cela supprime également les lignes commençant par des blancs.
— Kusalananda

Vrai. J'ai trouvé cela utile pour les fichiers de configuration car des lignes entre les commentaires remplissaient sinon le résultat. Si vous préférez garder les lignes blanches, changer *à +comme ceci:v/^\s+[#\n]/p
— David Lord

3

Le tuyau vers grep dans la réponse de oliver nadj peut être éliminé par (en supposant que GNU grepou compatible):

grep -v "^\s*[#\;]\|^\s*$" <some_conf_file>

Deuxième grep i @ nadj semble inutile, la réponse de @ goldilocks était plus que tout.
— Archemar

1
Je conviens que la réponse de goldilocks était correcte. Cependant, j'ai aussi jugé utile de ne pas afficher les lignes vides.
— Morten Lind

2
grep -v "^\s*[#;]" any.conf | grep -v "^\s*$"

c'est ce qui fonctionne pour moi. ignorer les lignes commentées ou vides, même les espaces avant le signe dièse ou le point-virgule


2

Ces exemples pourraient être utiles aux gens.

[user@host tmp]$ cat whitespacetest
# Line 1 is a comment with hash symbol as first char

# Line 2 is a comment with hash symbol as second char
  # Line 3 is a comment with hash symbol as third char
        # Line 4 is a comment with tab first, then hash
        ; Line 5 is a comment with tab first, then semicolon. Comment char is ;
; Line 6 is a comment with semicolon symbol as first char
[user@host tmp]$

Le premier exemple grep exclut les lignes commençant par une quantité quelconque d'espaces, suivie d'un symbole de hachage.

[user@host tmp]$ grep -v '^[[:space:]]*#' whitespacetest

        ; Line 5 is a comment with tab first, then semicolon. Comment char is ;
; Line 6 is a comment with semicolon symbol as first char
[user@host tmp]$

La seconde exclut les lignes commençant par un espace quelconque suivi d'un symbole de hachage ou d'un point-virgule.

[user@host tmp]$ grep -v '^[[:space:]]*[#;]' whitespacetest

[user@host tmp]$

0

Ici, j'en ai un meilleur (en supposant que GNU grepou compatible):

grep -v '^[#;/%<]\|^\s*$' anyfile.conf

exclure pour les lignes commençant par #;/%<des crochets et le deuxième filtre après le tuyau \s*$pour les lignes vierges.


2
Dans quel type de fichiers de conf sont <ou sont /utilisés pour les commentaires? Je connais beaucoup de formats de fichiers de conf où <est tout sauf un commentaire. !est parfois utilisé comme dans les fichiers de ressources X.
— Stéphane Chazelas


-2
egrep -v "^#|^$" anyfile.txt

cette commande consiste à grep toutes les informations du fichier à l’exclusion des commentaires et des lignes vides.


2
Notez que smb.conf commente également avec;
— Jeff Schaller

-3

Cela devrait vous afficher le fichier sans ces lignes qui commencent par #: grep -v "^#" filename


Cela ne fait rien aux lignes commençant par ;.
— Kusalananda
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.