如何使用正则表达式将两个条件后的文本提取到变量中?

如何使用正则表达式将两个条件后的文本提取到变量中?

我想在 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

相关内容