Je veux grep smb.conf
et ne voir que les lignes qui ne sont pas commentées.
grep "^[^#;]" smb.conf
La première ^
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 commençant par n'importe quel caractère autre que #
et ;
. Ce n'est pas la même chose que de signaler les lignes qui ne commencent pas par #
et ;
(pour lequel vous utiliseriez grep -v '^[#;]'
) en ce qu'il exclut également les lignes vides, mais c'est probablement préférable dans ce cas car je doute que vous vous souciez des lignes vides.
Si vous souhaitez ignorer les premiers caractères vides, vous pouvez le remplacer par:
grep '^[[:blank:]]*[^[:blank:]#;]' smb.conf
ou
grep -vxE '[[:blank:]]*([#;].*)?' smb.conf
Ou
awk '$1 ~ /^[^;#]/' smb.conf
Solution Vim:
:v/^\s*[#\n]/p
Je suis tombé sur cette question en essayant de trouver moi-même la solution vim.
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 n'importe quelle quantité d'espace blanc suivi 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 n'importe quel espace, suivies d'un symbole de hachage ou d'un point-virgule.
[user@Host tmp]$ grep -v '^[[:space:]]*[#;]' whitespacetest
[user@Host tmp]$
Le canal vers grep dans la réponse d'Oliver Nadj peut être éliminé par (en supposant GNU grep
ou compatible):
grep -v "^\s*[#\;]\|^\s*$" <some_conf_file>
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 la marque de hachage ou le point-virgule
Ici, je suis meilleur (en supposant GNU grep
ou compatible):
grep -v '^[#;/%<]\|^\s*$' anyfile.conf
exclure pour les lignes commençant par #;/%<
qui sont entre crochets et le deuxième filtre après le tuyau est \s*$
pour les lignes vides.
grep -v '^$\|^\s*#' temp
Celui-ci est beaucoup mieux, je l'ai obtenu de https://stackoverflow.com/questions/17392869/how-to-print-a-file-excluding-comments-and-blank-lines-using-grep- sed
Cela suppose GNU grep
ou compatible.