2015-09-14 43 views
0

比方說,我在~/.netrc幾個項目是這樣的:使用awk和zsh來的〜/ .netrc中配置程序讀取數據文件

machine ******************* 
login  ******* 
password ********** 

machine ********************* 
login  ***************** 
password ********** 

這個劇本,我可以通過填充第一機器塊 配置git ftp以上:

print "$(awk '/machine/ { skip = !skip; }; skip { print $1" "$2 }' ~/.netrc)" | while read k v 
do 
    case $k in 
     machine) 
      print git.config ftp.url $v 
      ;; 
     login) 
      print git.config ftp.user $v 
      ;; 
     password) 
      print git.config ftp.password $v 
    esac 
done 

但是我想能夠,靈活的原因,給這個腳本一個參數是機器 名,因此,只有該塊從上方使用;

如何在讀取~/.netrc時指示awk使用該參數並在 下一個機器實例上停止?

編輯:現在我意識到,我甚至還有一個缺陷代碼,因爲它是,因爲:跳過開關,每個第二個機器塊將被讀取,並且我想要一個並且只有一個用於機器名稱匹配用戶提供的 參數。

+1

您不需要捕獲'awk'輸出只是爲了將其打印回標準輸出:'awk'...'|雖然...'也一樣。 – chepner

回答

0

如果機器名是在蒙面場2,你可以做到這一點

awk -v RS= -v name="****etc" '$1=="machine" && $2==name {...` 

或awk腳本硬編碼名稱。通過將awk設置爲段落模式,您可以將這些行分組爲一個由空行分隔的邏輯記錄。

+0

不能這樣做,因爲那麼只有該機器行會被讀取,而不是另外兩個..登錄名和密碼 – branquito

+0

請檢查段落模式的更新 – karakfa