grep "^[^#;]" smb.conf
O primeiro ^
refere-se ao início da linha, portanto, as linhas com comentários iniciados após o primeiro caractere não serão excluídas. [^#;]
significa qualquer caractere que não seja #
ou ;
.
Em outras palavras, ele reporta linhas que começam com qualquer caractere diferente de #
e ;
. Não é o mesmo que informar as linhas que não começam com #
e ;
(para as quais você usaria grep -v '^[#;]'
), pois também exclui as linhas vazias , mas é provável que preferível neste caso, como eu duvido que você se preocupa com linhas vazias.
Se você quisesse ignorar os caracteres em branco iniciais, poderia alterá-lo para:
grep '^[[:blank:]]*[^[:blank:]#;]' smb.conf
ou
grep -vxE '[[:blank:]]*([#;].*)?' smb.conf
Ou
awk '$1 ~ /^[^;#]/' smb.conf