Ajuda a entender o comando sed

3

Alguém pode me ajudar a entender o que esse comando sed faz:

sed -n '/\(^[^:]*[eE]xception\):.*/s///p' $LOGFILE | uniq -c

Esta pesquisa $LOGFILE para as palavras Exception ou exception , conta quantas linhas tem esta palavra e informa a contagem?

Eu sei que -n significa suprimir a saída e uniq -c informa o número de correspondências, mas não entendo o que o '/\(^[^:]*[eE]xception\):.*/s///p' está fazendo.

Muito obrigado a todos.

    
por Jack of Some Trades 02.11.2017 / 16:52

1 resposta

3

Há algumas coisas estranhas aqui. Primeiro, como acabei de aprender tentando responder sua pergunta (obrigado!), sed tem um truque legal:

/foo/s//bar/

Isto significa "se esta linha corresponde a foo , então substitua o que foi correspondido por foo com bar . Eu realmente não entendo o ponto disso, para ser honesto, você poderia fazer a mesma coisa com um simples s/foo/bar/ , mas lá vai você.

Quanto ao regex:

  • ^ : corresponde ao começo da linha.
  • [^:]* : quando o ^ está dentro de colchetes, isso é um conjunto de caracteres negativos. Então, enquanto [abc] significa a ou b ou c , [^abc] significa qualquer coisa exceto a , b ou c . Portanto, [^:]* corresponderá a 0 ou mais não- : .
  • [eE]xception : corresponde a exception ou Exception .
  • :.* : corresponde a : e depois todo o restante até o final da linha.
  • Finalmente, a primeira parte está em parênteses com escape ( \( \) ), o que significa que o que foi correspondido é capturado e pode ser consultado posteriormente como .

O próximo bit é o operador de substituição, aqui s///p . Isso significa substituir o que foi correspondido antes (incluindo a parte não capturada, portanto, toda a linha) com o que foi capturado ( ). O resultado é que somente o que estava na linha até e incluindo a palavra expression (ou Expression ) será impresso. E, como o -n suprime a saída, o p no final significa "imprima esta linha se a substituição foi bem-sucedida.

Por fim, o uniq -c fornecerá o número de linhas que correspondem ao padrão encontrado no seu arquivo. Observe que não é o número de vezes que a palavra exception ocorre no arquivo. Se você tiver mais de um exception: na mesma linha, isso será contado como um.

    
por terdon 02.11.2017 / 18:58

Tags