compreendendo a instrução estendida Sed / RegExp

0

Por isso, estou usando este forro para obter a versão mais recente do docker-compose .

curl --silent "https://api.github.com/repos/docker/compose/releases/latest" | grep "tag_name" | sed -E 's/.*"([^"]+)".*//'

Agora estou muito interessado na instrução sed especificada. Alguém pode me ajudar a entender melhor?

sed -E 's/.*"([^"]+)".*//'

Saída do comando sem a declaração sed: "tag_name": "1.22.0",

Saída do comando com a declaração sed: 1.22.0

    
por 64Hz 31.07.2018 / 11:10

2 respostas

0

sed -E 's/.*"([^"]+)".*//

  • -E : sed usará o Regex estendido
  • 's': para substituir o valor.
  • / : o separador de padrão e substituição que será usado.
  • .*"([^"]+)".* : a melhor maneira de explicar o regex é um gráfico:
    Basicamente, ele corresponde a cada linha que tem dois blocos de aspas e coloca o segundo (sem as aspas) dentro do grupo um.
  • / : separador entre o seu regexp e o seu substituto
  • : substitua sua linha original pelo número do grupo 1: 1.22.0 neste caso.
  • / : último separador sem opção depois, por isso irá substituir apenas uma vez por linha.

Espero que isso seja bem explicar.

    
por 31.07.2018 / 11:41
1

Eu não sei o que você sabe sobre sed. em sed você pode encontrar:

sed - stream editor for filtering and transforming text

e:

-E, -r, --regexp-extended use extended regular expressions in the script (for portability use POSIX -E).

em sed você poderia definir, deixe-me dizer, padrão de palavras entre parênteses e você poderia pegá-las com \ Não. na sua pergunta, deixe-me escrever como abaixo:

echo '"tag_name": "1.22.0"' | sed -E 's/"([a-z]+\_[a-z]+)": "([0-9\.]+)"//'
  • -E usa expressões regulares estendidas
  • 's/Part1/Part2/ da estrutura principal
  • Padrão de regex " começa com "
  • ([a-z]+\_[a-z]+) primeiro padrão de palavras contém duas partes de caracteres associados a _
  • ": " depois que esses símbolos de sequência ocorressem
  • ([0-9\.]+) o segundo padrão de palavras contém tantos dígitos com .
  • " pattenr termina com isso.
  • \ 2 agora você chama o segundo padrão de palavra
por 31.07.2018 / 12:14