정규식을 사용하여 두 조건 뒤의 텍스트를 변수로 추출하는 방법은 무엇입니까?

정규식을 사용하여 두 조건 뒤의 텍스트를 변수로 추출하는 방법은 무엇입니까?

ssh_config 파일에서 특정 호스트에 대한 설정을 추출하여 변수에 넣고 싶습니다.

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

먼저 호스트 이름을 일치시킨 후 지정된 설정에 대해 처음 나타나는 값을 일치시켜야 합니다. 저는 이제 막 기본 정규식을 배우기 시작했고 스스로 익혔지만 시간이 너무 많아서 도움이 필요합니다. 이 스크립트는 "Host mysite"를 일치시킨 후 처음으로 나타나는 "IdentityFile"을 찾고 "IdentityFile"이라는 단어를 "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"

나에게 필요한 것은 IdentityFile의 변수에 설정된 경로입니다. 그래서 이렇게 사용할 수 있어요.

ssh-add $IDPATH

답변1

이 시도:

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

관련 정보