Sed Explicação: arquivo sed '/./,$!d'

5

Alguém poderia explicar esse código que exclui todas as linhas em branco no topo de um arquivo:

sed '/./,$!d' file

Eu entendo que é uma regex, combinando apenas com o primeiro caractere, mas não entendo a parte $! d. É isso que está sendo substituído ou são opções para o jogo?

É mesmo um comando de pesquisa se não começar com 's /'...?

Desculpe esta é uma pergunta ruim, eu simplesmente não sei onde procurar. (e então, como você me recomendaria encontrar a resposta para isso no futuro?)

Fonte de código (de outra pergunta)

    
por Emerson Peters 17.11.2016 / 10:44

1 resposta

9
sed '/./,$!d'

Da primeira linha que contém um caractere (em branco ou não) até o final do arquivo - negate (que significa do começo do arquivo para a linha antes da primeira linha que contém um caractere) - delete. / p>

Isso exclui as linhas principais vazias , não as linhas em branco. Para excluir linhas em branco iniciais (linhas que estão vazias ou contêm apenas caracteres de espaço em branco), digamos '/\S/,$!d' .

Leia "Sed, uma introdução e tutorial" no link . Em seguida, leia o manual de referência no link .

Resumindo:

  • A forma geral de um comando sed é o comando [seletor] [negação] [flags] (colchetes indicam partes opcionais)

  • O seletor, se presente, seleciona as linhas nas quais o comando se aplica

  • Se ! aparecer, o seletor será negado, ou seja, o comando se aplicará às linhas que não correspondem ao seletor.

  • Se nenhum seletor estiver presente, o comando se aplica a todas as linhas.

  • Um seletor pode selecionar uma linha (por número) ou um conjunto de linhas (por expressão regular) ou as linhas entre uma linha inicial (por número ou expressão regular) e uma linha final (por número ou regular expressão).

  • Em nosso caso, o seletor é /./,$ , o que significa de a primeira linha encontrada que corresponde a /./ (ou seja, contém pelo menos um caractere) a o final do arquivo ( $ é usado como um número de linha e significa a última linha no arquivo).

  • É negado por ! , para que o comando se aplique às linhas desde o início do arquivo até a linha antes da primeira linha corresponder a /./ .

  • O comando d exclui as linhas selecionadas.

por 17.11.2016 / 10:50

Tags