Bash

如何使用正則表達式將以下兩個條件的文本提取到變數中?

  • January 22, 2015

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

試試這個 :

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

引用自:https://unix.stackexchange.com/questions/180505