正規表現を使用して2つの条件の後のテキストを変数に抽出するにはどうすればよいですか?

正規表現を使用して2つの条件の後のテキストを変数に抽出するにはどうすればよいですか?

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

関連情報