我需要決議其中包含字串中空格的json,但輸出值在空格處被截斷。
我的Initial.json檔案是:
{
"WorkspaceName":"aaa bbb ccc ddd eee",
"ReportFileName":"xxx yyy zzz",
"StageName":"sit uat prod"
}
我當前的外殼代碼是:
InitialFile=$JsonPath/deployment/configuration/Initial.json
data=$(cat $InitialFile | sed -r 's/",/"/' | egrep -v '^[{}]' | sed 's/"//g' | sed 's/:/=/1')
declare $data
echo WorkspaceName is_$WorkspaceName
echo ReportFileName is_$ReportFileName
echo StageName is_$StageName
結果是:
WorkspaceName is_aaa
ReportFileName is_xxx
StageName is_sit
預期結果是aaa bbb ccc ddd eee, xxx yyy zzz,sit uat prod而不是aaa, xxx, sit。
如何實作?我對貝殼不是很熟悉,任何建議將不勝感激。
更新:
我使用以下代碼來解決此問題:
WorkspaceName=$(grep -o '"WorkspaceName": "[^"]*' configuration/Initial.json | grep -o '[^"]*$')
ReportFileName=$(grep -o '"ReportFileName": "[^"]*' configuration/Initial.json | grep -o '[^"]*$')
StageName=$(grep -o '"StageName": "[^"]*' configuration/Initial.json | grep -o '[^"]*$')
可以看到,這樣就解決了問題,但是看起來并不完美,我需要分別獲取json中的每個變數,會有很多重復的陳述句,當json中有很多變數時,會這樣a 很麻煩,有沒有辦法簡化呢?
uj5u.com熱心網友回復:
使用sed
$ InitialFile="${JsonPath}/deployment/configuration/Initial.json"
$ data=$(sed -En 's/^[^"]*"([^"]*)":"([^"]*).*$/\1 is_\2/p' "$InitialFile")
$ echo "$data"
WorkspaceName is_aaa bbb ccc ddd eee
ReportFileName is_xxx yyy zzz
StageName is_sit uat prod
uj5u.com熱心網友回復:
第一種解決方案(GNU awk):使用 GNUawk,您可以嘗試以下解決方案,僅使用您展示的示例撰寫和測驗。
awk -v RS='"[^"]*":"[^"]*",?' '
RT{
sub(/":"/,OFS,RT)
gsub(/^"|",?$/,"",RT)
print RT
}
' Input_file
第二種解決方案:如果jq允許,您可以簡單地執行以下命令。OP 所說的不在 OP 的系統中,而是在此處將其作為變體添加。
jq -r 'to_entries[] | "\(.key) \(.value)"' Input_file
顯示的示例輸出如下:
WorkspaceName aaa bbb ccc ddd eee
ReportFileName xxx yyy zzz
StageName sit uat prod
uj5u.com熱心網友回復:
您可以使用 sed 和正則運算式:
eval $(sed -n -e 's/^.*"\(.*\)":\(".*"\).*$/\1=\2/p' $InitialFile)
sed將檔案名作為引數-n將使 sed 默認不列印-e 's/<match pattern>/<output>/用于搜索和替換的 sed 命令(現場測驗)。p如果匹配模式,則列印輸出eval將評估輸出,就像您在提示符下撰寫它一樣。在這種情況下,將值分配給某些變數。
我認為上面的代碼在幾個方面更短更好,但當然可以通過一些調整或其他幾種方式來完成。您的代碼的主要問題是分配需要是一個字串,而不是多個。所以你的代碼產生了這個:
WorkspaceName=aaa bbb ccc ddd eee
雖然它應該是:
WorkspaceName="aaa bbb ccc ddd eee"
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/515319.html
標籤:json壳sedgrep
