Bash
如何使用正則表達式將以下兩個條件的文本提取到變數中?
我想在 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