Como grep linhas que não começam com “#” ou “;”?

58

Eu quero grep smb.conf e ver apenas as linhas que não são comentadas.

    
por denys 11.01.2013 / 21:01

7 respostas

86
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
    
por 11.01.2013 / 21:05
4

Solução de Vim:

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

Eu tropecei nessa questão ao tentar encontrar a solução vim.

    
por 22.12.2015 / 00:55
3

O pipe para grep na resposta de oliver nadj pode ser eliminado por (assumindo o GNU grep ou compatível):

grep -v "^\s*[#\;]\|^\s*$" <some_conf_file>
    
por 13.10.2015 / 10:43
2
grep -v "^\s*[#;]" any.conf | grep -v "^\s*$"

é isso que funciona para mim. ignore linhas comentadas ou vazias, mesmo espaços em branco antes de marcar ou ponto e vírgula

    
por 19.03.2015 / 04:10
1

Aqui eu melhorei um (assumindo o GNU grep ou compatível):

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

exclua para linhas que começam com #;/%< , que estão entre colchetes, e o segundo filtro após o pipe é \s*$ para linhas em branco.

Espero que isso ajude os outros ..

    
por 16.03.2017 / 10:43
1

Esses exemplos podem ser úteis para as pessoas.

[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]$

O primeiro exemplo de grep exclui linhas que começam com qualquer quantidade de espaço em branco seguido por um símbolo de hash.

[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]$

O segundo exclui linhas que começam com qualquer quantidade de espaço em branco seguido por um símbolo de hash ou ponto-e-vírgula.

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

[user@host tmp]$
    
por 30.09.2015 / 20:04
0
grep -v '^$\|^\s*#' temp

Esse é muito melhor, eu consegui de link

Ele assume o GNU grep ou compatível.

    
por 31.03.2016 / 06:41

Tags