O primeiro ^se refere 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 relata linhas que começam com qualquer caractere que não seja #e ;. Não é o mesmo que relatar as linhas que não começam #e ;(para as quais você usaria grep -v '^[#;]'), pois também exclui as linhas vazias , mas provavelmente é preferível nesse caso, pois duvido que você se importe com as linhas vazias.
Se você quiser ignorar os principais caracteres em branco, poderá alterá-lo para:
a resposta certa é: cat /etc/samba/smb.conf | grep ^[^#\;]Mas de qualquer maneira Obrigado
denys
Sim, ou você pode usar "aspas"; Eu editei isso posteriormente.
Goldilocks
7
@denys Você está errado: a resposta de goldilocks não é pior que a sua. .1 Evite usar a cat ...| sintaxe !. .2 Para chicotear linhas vazias E linhas contendo apenas espaço, talvez com os comentários que U possa usar:grep -v "^ *\(#.*\|\)$" < smb.conf
F. Hauri
7
@EmanuelBerg É um garfo inútil. cat file | grep "blah"implie a execução de dois binários através de um fifo , enquanto grep "blah" <filefaz exatamente o mesmo e vincula filenaturalmente ao grep STDIN. [bash] gato inútil é um assunto completo de pesquisa em qualquer mecanismo de pesquisa! -> blog.sanctum.geek.nz/useless-use-of-cat ... para amostra #
F. Hauri
2
Não faz exatamente o mesmo . Cria 2 processos e um canal onde 1 processo é suficiente. Leia o link fornecido no último comentário de @ F.Hauri.
rahmu
4
Solução Vim:
:v/^\s*[#\n]/p
Eu me deparei com essa pergunta ao tentar encontrar a solução vim.
Isso também excluiria linhas que começam com espaços em branco.
Kusalananda
Verdadeiro. Achei isso útil para arquivos de configuração, pois as linhas entre os comentários preenchem a saída. Se preferir manter as linhas em branco, altere *para +o seguinte:v/^\s+[#\n]/p
David Lord
3
O canal para grep na resposta de oliver nadj pode ser eliminado por (assumindo o GNU grepou compatível):
[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.
Em que tipo de arquivos conf são <ou /usados para comentários? Conheço muitos formatos de arquivo conf, onde <há tudo, menos um comentário. !às vezes é usado como nos arquivos de recursos X.
testparm
faça isso melhor, pois também exibe os valores padrão.Respostas:
O primeiro
^
se refere 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 relata linhas que começam com qualquer caractere que não seja
#
e;
. Não é o mesmo que relatar as linhas que não começam#
e;
(para as quais você usariagrep -v '^[#;]'
), pois também exclui as linhas vazias , mas provavelmente é preferível nesse caso, pois duvido que você se importe com as linhas vazias.Se você quiser ignorar os principais caracteres em branco, poderá alterá-lo para:
ou
Ou
fonte
cat /etc/samba/smb.conf | grep ^[^#\;]
Mas de qualquer maneira Obrigadocat ...|
sintaxe !. .2 Para chicotear linhas vazias E linhas contendo apenas espaço, talvez com os comentários que U possa usar:grep -v "^ *\(#.*\|\)$" < smb.conf
cat file | grep "blah"
implie a execução de dois binários através de um fifo , enquantogrep "blah" <file
faz exatamente o mesmo e vinculafile
naturalmente ao grepSTDIN
. [bash] gato inútil é um assunto completo de pesquisa em qualquer mecanismo de pesquisa! -> blog.sanctum.geek.nz/useless-use-of-cat ... para amostra #Solução Vim:
Eu me deparei com essa pergunta ao tentar encontrar a solução vim.
fonte
*
para+
o seguinte:v/^\s+[#\n]/p
O canal para grep na resposta de oliver nadj pode ser eliminado por (assumindo o GNU
grep
ou compatível):fonte
é isso que funciona para mim. ignore as linhas comentadas ou vazias, mesmo espaços em branco antes da marca de hash ou ponto-e-vírgula
fonte
Esses exemplos podem ser úteis para as pessoas.
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.
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.
fonte
Aqui eu tenho um melhor (assumindo GNU
grep
ou compatível):exclua para as linhas que começam com
#;/%<
colchetes e o segundo filtro após o tubo é\s*$
para linhas em branco.fonte
<
ou/
usados para comentários? Conheço muitos formatos de arquivo conf, onde<
há tudo, menos um comentário.!
às vezes é usado como nos arquivos de recursos X.Este é muito melhor, eu peguei em https://stackoverflow.com/questions/17392869/how-to-print-a-file-excluding-comments-and-blank-lines-using-grep-sed
Pressupõe GNU
grep
ou compatível.fonte
;
um comentário que deve ser removido.este comando é grep todas as informações no arquivo, excluindo comentários e linhas em branco.
fonte
;
Isso deve exibir o arquivo sem as linhas que começam com
#
:grep -v "^#" filename
fonte
;
.