Como posso usar o regex para extrair o texto seguindo duas condições em uma variável?

1

Gostaria de extrair uma configuração para um determinado host no arquivo ssh_config e colocá-lo em uma variável.

Host mysite
    HostName 123.1.1.1
    User myuser
    Port 13245
    GSSAPIAuthentication no
    IdentityFile /home/myuser/.ssh/id_dsa

Host anothersite
    HostName 321.2.2.2
    User myuser
    Port 22
    GSSAPIAuthentication no
    IdentityFile /home/myuser/.ssh/anothersite_dsa

Eu preciso corresponder a primeira ocorrência do valor para a configuração dada depois que o nome do host tiver sido correspondido primeiro. Acabei de começar a aprender regex básico e isso é tão longe quanto eu comecei por conta própria, mas eu tenho muito tempo para isso e poderia usar alguma ajuda. O script encontra a primeira ocorrência de "IdentityFile" depois de coincidir com "Host mysite" e substituir a palavra "IdentityFile" por "test".

IDF="IdentityFile"
HOST="mysite"
get_host_option() {
    option="$IDF"
    [ -f /etc/ssh/ssh_config ] || return
    perl -0pe 's/(?<=Host[[:space:]]'"$HOST"')(.*?)'"$option"'/$1test/s' /etc/ssh/ssh_config
}
get_host_option "$IDS"

O que eu preciso é o caminho que foi definido para o IdentityFile ser colocado em uma variável. Então eu poderia nos fazer assim.

ssh-add $IDPATH
    
por dimmech 22.01.2015 / 18:31

1 resposta

1

Tente isto:

perl -0ne 'print $& if /^Host.*?IdentityFile\s+\K[^\n]+/ms' file
    
por 22.01.2015 / 18:36