Sed, remova todos os comentários em um arquivo [duplicado]

1

Eu tenho um comando sed que remove comentários em um arquivo como

sed -i /^#/d /path/to/file

Isso funciona, mas não quando os comentários são recuados / possuem um espaço anterior.

como

#this is a good comment           ---- works
    #this is an indented comment  ---- doesn't work

Como posso alterá-lo para remover linhas que tenham # como o primeiro caractere visível?

    
por Madhavan Kumar 12.09.2015 / 19:16

4 respostas

1

Modifique seu regex para permitir o espaço em branco inicial.

sed -e '/^[ \t]*#/d'

Esse regex corresponderá às linhas que começam com 0 ou mais espaços ou tabulações (em qualquer ordem), seguidas por um sinal de hash.

O GNU sed também suporta nomes simbólicos:

sed -e '/^[[:space:]]*/d'

Que inclui todos os caracteres em branco, incluindo os idiomas estranhos unicode em idioma estrangeiro. Isso é menos portátil, no entanto.

    
por 12.09.2015 / 19:23
1

Você pode fazer:

sed '/^[[:blank:]]*#/d' file.txt

Usando grep :

grep -v '^[[:blank:]]*#' file.txt
    
por 12.09.2015 / 19:23
1

Uso:

sed '/^\s*#/d'

Explicação:

^ beginning of line
\s* arbitrary amount of whitespace (or none)
    
por 12.09.2015 / 19:24
0

tente

sed -i -e '/^[ \t]*#/d' /path/to/file

Você pode ter que substituir \ t por uma guia literal.

    
por 12.09.2015 / 19:23

Tags