Confuso sobre o comando: sed '/ ^ # / d' ~ / .profile

1

Eu preciso saber o que esse comando faz.

sed '/^#/d' ~/.profile

A saída que este comando me dá é esta:

if [ -n "$BASH_VERSION" ]; then
    # include .bashrc if it exists
    if [ -f "$HOME/.bashrc" ]; then
        . "$HOME/.bashrc"
    fi
fi

Eu sei que este comando:

sed '/^$/d' file.txt

significa excluir linhas em branco em file.txt .

Eu sei que # pode significar o fim de um comando ou comentário.

Eu sei que $ indica o início do comando.

O que exatamente o comando

sed '/^#/d' ~/.profile

faz?

    
por user82419 01.05.2017 / 02:40

2 respostas

4

A linha de comando sed

sed '/^#/d' ~/.profile

removerá todos os comentários de shell que começam no início de uma linha do arquivo ~/.profile , por exemplo o primeiro, mas não o segundo, das duas linhas seguintes:

# comment
  # indented comment

Ele faz isso tentando corresponder # no início da linha ( ^ ) e excluirá ( d ) todas as linhas correspondentes.

Para também remover comentários recuados de um script de shell, use

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

[[:blank:]] corresponderá a caracteres de espaço e guias horizontais.

$ significa apenas "início de um comando" no sentido em que é o prompt comum usado pelo shell para solicitar que você digite algo na linha de comando.

# é o caractere que introduz um comentário no shell. Ele não tem nenhum propósito em um script sed além de corresponder a # na entrada. Eu nunca vi isso usado para significar o "fim de um comando".

    
por 01.05.2017 / 09:51
1

/^#/ corresponde a linhas iniciadas ( ^ ) com # . d os exclui. A ação padrão de sed é imprimir a linha (a menos que -n seja fornecido), então qualquer outra coisa é impressa.

I know that # can mean the end of a command or a comment.

I know $ indicates start of command.

Mm, não. Em expressões regulares, ^ marca o início da string (ou linha), $ o final. # é usado como um caractere de comentário, geralmente no início de uma linha.

Observe que muitos arquivos que usam # como um caractere de comentário permitem que ele seja usado após um comando ou, caso contrário, não esteja diretamente no início de uma linha. Pode ser recuado, como no comentário restante na saída do seu exemplo.

Algo como /^ *#/d (ou /^[ \t]*#/d ) pode ser melhor, pois também removeria comentários recuados.

    
por 01.05.2017 / 09:29