如何從文件中提取數據並從其中一個值構造文件名
我正在嘗試從配置文件中提取兩個值並將它們寫入新文件。困難的部分是我希望新文件的名稱由輸入文件中的值之一確定。
我試圖提取的值是“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/
替換pattern
為replacement
at amatch
ing 行。如果replacement
是一個空字元串,它會被有效地移除。請注意,我從單引號切換到雙引號來處理字元串中的單引號,並且您可以使用萬用字元* .
來匹配更複雜的字元串並將sed
命令與分號組合。
- 我們將兩個結果作為
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]}
。