Bash

如何從文件中提取數據並從其中一個值構造文件名

  • March 7, 2016

我正在嘗試從配置文件中提取兩個值並將它們寫入新文件。困難的部分是我希望新文件的名稱由輸入文件中的值之一確定。

我試圖提取的值是“Build_Version”和 Docker 名稱(“docker_Name”)中的四個字母首字母縮寫詞。例如,如果文件顯示docker_Name='bcbs_pr-app-01',我只想要“bcbs”。我想將它們寫入具有建構名稱的文件,例如bcbs_build.txt.

以下是日誌文件的摘錄:

nonSSL_port=80  # FOR STAGING 
Build_Type=prod 
Build_Version=9.0.00.01_134143 
docker_Name='bcbs-pr-app-01'

所需的文件輸出是

bcbs
9.0.00.01_134143 

我想出了一個sed命令,用於提取我想要的值

sed -n -e '/Build_Version=/p' -e '/docker_Name=/p' environment-info.conf > build_version.txt

但這會完整地提取Build_Version=docker_Name=行,我只想要 Build_Version 和 docker name 值。而且我仍然需要弄清楚如何使用四個字母的 Docker 名稱首字母縮寫詞 (bcbs) 來命名文件。

該文件看起來像sh語法。因此,如果該文件確實是一個打算在sh腳本中獲取的配置文件,只需執行以下操作:

. ./environment-info.conf &&
 printf '%s\n' "${docker_Name%%-*}" "$Build_Version" > "${docker_Name%%-*}_build.txt"

1)交替你的sed,到a)刪除第一個單引號docker_Name,b)刪除-pr-app-01'(包括最後一個單引號),c)刪除<value>=部分:

sed -n "/Build_Version=/s/.*=//p;/docker_Name=/s/.*=//;s/'//;s/-.*//p"

where/match/s/pattern/replacement/替換patternreplacementat a matching 行。如果replacement是一個空字元串,它會被有效地移除。請注意,我從單引號切換到雙引號來處理字元串中的單引號,並且您可以使用萬用字元* .來匹配更複雜的字元串並將sed命令與分號組合。

  1. 我們將兩個結果作為BASH數組讀入:
values=( $( sed -n "/Build_Version=/s/.*=//p;/docker_Name=/s/.*=//;s/'//;s/-.*//p" file ) )

地點array=( value1 value2 value3 )和地點$(do this command)

3)我們將數組用於我們的目的,請注意計數器從 開始0

echo ${values[1]} > ${values[1]}
echo ${values[0]} >> ${values[1]}

我們通過數組名稱和條目的 intex 來定址數組的條目${array[intex]}

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