'sed' erro de regexp

3

Estou tentando escrever um alias para obter o ip de um contêiner docker. O comando é o seguinte:

docker inspect redis | grep IPAddress | awk 'NR==3{ print $2 }' | sed 's/[^"]*"\([^"]*\)".*//'

Se eu iniciá-lo a partir da linha de comando, ele funcionará corretamente. Então eu inseri em bash_aliases :

alias redis-ip="docker inspect redis | grep IPAddress | awk 'NR==3{ print $2 }' | sed 's/[^"]*"\([^"]*\)".*//'"

Mas quando eu inicio o redis-ip , recebo este erro:

sed: -e expression #1, char 19: invalid reference  on 's' command's RHS

Alguém pode me dizer qual é o erro?

    
por pietrovismara 27.07.2016 / 12:42

3 respostas

3

Use uma função de shell para isso em vez de um alias:

function redis-ip {
  docker inspect redis |
  grep IPAddress |
  awk 'NR == 3 { print $2 }' |
  sed 's/[^"]*"\([^"]*\)".*//'
}

Se o sed fizer o que você quer ou não, não sei como não sei o que o comando docker gera.

    
por 27.07.2016 / 12:49
2

O problema é que você tem seu alias entre aspas duplas ( " ). Isso significa que o $2 no seu script awk é passado para o shell e não para awk e que as aspas duplas no comando sed estão estragando o alias. Seu alias deve funcionar como esperado se você fizer isso:

alias redis-ip="docker inspect redis | grep IPAddress | awk 'NR==3{print \ }' | sed 's/[^\"]*\"\([^\"]*\)\".*//'"

Provavelmente melhor e certamente mais simples para usar uma função .

    
por 27.07.2016 / 12:57
1

Normalmente, eu diria "use jq ou jsonpipe ou similar se você quiser analisar ou extrair dados do json", mas o comando docker inspect já possui formatação de saída e extração de campo integradas.

Você pode dizer a docker inspect para retornar apenas o (s) campo (s) em que está interessado, por exemplo,

alias redis-ip="docker inspect -f '{{.NetworkSettings.IPAddress}}' redis"

ou

alias redis-ip='docker inspect -f '\''{{.NetworkSettings.IPAddress}}'\'' redis'

Isso é (resumidamente) documentado no link

Veja também O que verificar quando você está inspecionando para mais detalhes e exemplos. E o Docker Inspect Template Magic é outro post de blog com uma boa visão geral do que é possível com o docker inspecionar a formatação de saída e vários outros exemplos úteis.

    
por 28.07.2016 / 13:00