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

Respostas:


13

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

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

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

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

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

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.


-1
$ perl -pi -e '$_="" if /^\s*#/' filename

Isso não é bom - não exclui linhas e limpa linhas como #a#b
Mat
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.