Excluir linhas começando com #

10

Como excluo as linhas que começam com a #, considerando que pode haver espaços em branco à esquerda e à direita da #?

  # Master socket provides access to userdb information. It's typically
chris4000
fonte

Respostas:

13

Isso parece funcionar, mas eu não pensei muito nisso:

sed -e '/^[[:space:]]*#/d'
Ulrich Schwarz
fonte
10

Você pode usar greppara isso

grep -vh '^[[:space:]]*#' filename

Como, como presumo, você está retirando comentários de algum arquivo, considere também remover linhas vazias, o que expande o acima para:

grep -vh '^[[:space:]]*\(#\|$\)' filename
rozcietrzewiacz
fonte
3

awk A solução é inverter a correspondência do seu padrão.

$> cat ./text
elephant
# Master socket provides access to userdb information. It's typically
zoo
 #ok
penguin
# !

$> awk '!/^(\ )*#/ {print $0}' ./text
elephant
zoo
penguin
ДМИТРИЙ МАЛИКОВ
fonte
4
Não há necessidade de escapar o caractere de espaço, não há necessidade de capturar o caractere de espaço, não há necessidade de especificar a ação padrão: awk '!/^ *#/' ./text.
manatwork
awk '/^ *#/{next}1' filedeve ser bom o suficiente.
jaypal singh
0
perl -ne 'print if ! /^\s*#/' ./text
Peter John Acklam
fonte
oi @ Peter-john-acklam, isso funcionaria quando o código fosse seguido por # comment?
precisa saber é o seguinte
0

Usando os dados de amostra publicados por ДМИТРИЙ МАЛИКОВ ...

$ grep -vPh '^\s*#' filename.txt | grep -Po '\w+'
elephant
zoo
penguin

Eu prefiro usar o pcre com grep, então eu uso a opção -P para grep (deve ser GNU grep). O segundo grep é açúcar puro para fornecer as palavras sem espaço em branco. Também "removeria" as linhas vazias.

Jim
fonte
-1
$ perl -pi -e '$_="" if /^\s*#/' filename
Zaid
fonte
Isso não é bom - não exclui linhas e limpa linhas como #a#b
Mat