o que significa: g nesta ação sed?

1

Eu sei que as pessoas usam : em vez de / quando estão lidando com caminhos, mas o que :g faz na seguinte sed action?

Por que o caminho1 está entre aspas? Alguém pode explicar a ação deste código?

sed -i -e s:INPUT_REPLACE:"${path1}":g ${path2}
    
por Nimakhin 08.09.2016 / 01:33

1 resposta

7

Os dois pontos : são delimitadores para o padrão (à esquerda) e substituição (à direita). g diz ao sed para substituir "globalmente" (mudar tudo o que corresponde ao padrão em cada linha, em vez de apenas o primeiro em uma determinada linha).

São usados três pontos, porque você precisa de três delimitadores. Então, :g é realmente duas coisas: o último delimitador e o modificador "g".

As aspas são usadas caso esta parte da expressão "${path1}" contenha algum caractere (quando a variável é substituída), o que causaria um erro no comando. Por exemplo, se contivesse um espaço ou tabulação, isso quebraria o parâmetro de substituição passado pelo shell para sed em duas partes (um erro).

Então ... este comando

sed -i -e s:INPUT_REPLACE:"${path1}":g ${path2}

informa o sed para ler / gravar o mesmo arquivo (a opção -i ). O arquivo é ${path2} . Ele procura linhas contendo "INPUT_REPLACE" e substitui essa cadeia em cada linha pelo que estiver na variável ${path1} . Ele faz isso para cada ocorrência de "INPUT_REPLACE" em cada linha.

A propósito: se "$ {path1}" contiver "INPUT_REPLACE" (ou a substituição fizer uma ocorrência), sed não refazerá as coisas e substituirá novamente. Isso só acontece nas partidas iniciais.

A opção -i não está em POSIX , mas está disponível com Linux e BSDs .

    
por 08.09.2016 / 01:34

Tags