gpt4 book ai didi

linux - 从 bash 中的变量中提取子字符串

转载 作者:太空宇宙 更新时间:2023-11-04 10:33:40 25 4
gpt4 key购买 nike

我有一个名为 var 的变量,其值如下所示。

$ echo $var   
{'active_production_dc':'sc-tx2','standby_production_dc':'sc_tx3','active_integration_dc':'int_tx3','standby_integration-dc':'int_va1'}

从这个输出中,我需要提取值

'active_production_dc', 
'standby_production_dc',
'active_integration_dc' and
'standby_integration_dc' into four different variables.

下面的只是提取 key 。我想将键提取到变量中。

printf "%s" "$var" | awk 'NR>1 && NR%2' RS="({'|'.'|'})"

如果我

echo $active_production_dc

然后它应该返回

sc-tx2

类似的东西。基本上,active_production_dc 的值应该保存在变量中。

最佳答案

原始问题的答案

让我们从您的变量开始:

$ echo "$var"
{'active-production-dc':'sc-tx2','standby-production-dc':'sc-tx3','active-integration-dc':'int-tx3','standby-integration-dc':'int-va1'}

使用jq

jq 不按原样接受字符串。我们必须首先用双引号替换单引号。然后我们可以提取 key :

$ echo "$var" | sed 's/'\''/"/g' | jq keys
[
"active-integration-dc",
"active-production-dc",
"standby-integration-dc",
"standby-production-dc"
]

使用 awk

使用 awk 提取 key :

$ printf "%s" "$var" | awk 'NR%2==0' RS="({'|'.'|'})"
active-production-dc
standby-production-dc
active-integration-dc
standby-integration-dc

使用 awk 提取对应于这些键的值:

$ printf "%s" "$var" | awk 'NR>1 && NR%2' RS="({'|'.'|'})"
sc-tx2
sc-tx3
int-tx3
int-va1

修改问题的答案

对于修改后的问题,我们需要一个新的var:

$ echo "$var"
{'active_production_dc':'sc-tx2','standby_production_dc':'sc_tx3','active_integration_dc':'int_tx3','standby_integration_dc':'int_va1'}

我们可以像这样创建以键命名的 shell 变量:

$ while IFS=":" read -r -d, key val; do declare "$key=$val"; done < <(echo "$var" | sed "s/[{}']//g; s/$/,/")

完成后,键和值就可以访问了:

$ echo "$active_production_dc"
sc-tx2

或者,也许更好的是,我们可以通过关联数组使键和值在 bash 中可用。使用:

declare -A a
while IFS=":" read -r -d, key val
do
a["$key"]="$val"
done < <(echo "$var" | sed "s/[{}']//g; s/$/,/")

运行时,在修改后的问题中使用 var 的值,然后生成的 a 包含键和值:

$ declare -p a
declare -A a='([standby_integration_dc]="int_va1" [active_production_dc]="sc-tx2" [active_integration_dc]="int_tx3" [standby_production_dc]="sc_tx3" )'

可以通过其键访问单个值:

$ echo "${a[active_production_dc]}"
sc-tx2

关于linux - 从 bash 中的变量中提取子字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38560381/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com