如何从环境变量FILE_CONTENTS中提取default的key_id值?
提取配置文件中[default]项下的key_id值
现有配置内容如下:
credentials: [default] key_id = AKIAGHJQTOP secret_key = alcsjkf [default2] key_id = AKIADGHNKVP secret_key = njprmls需要提取
[default]段下的key_id值,要求从环境变量FILE_CONTENTS读取内容,不传入文件名。之前尝试的命令无效:export VAR=$(echo "$FILE_CONTENTS" | awk '/credentials.default.key_id/ {print $2}')
方法一:awk精准匹配
你的awk命令失效是因为正则表达式写错了,原配置里不存在credentials.default.key_id这类字符串。正确思路是先定位到[default]段,再提取对应key_id的值:
export VAR=$(echo "$FILE_CONTENTS" | awk '/\[default\]/ {flag=1; next} /\[.*\]/ {flag=0} flag && /key_id/ {print $3}')
逻辑说明:
/\[default\]/ {flag=1; next}:匹配到[default]时,开启标记flag并跳过当前行/\[.*\]/ {flag=0}:匹配到其他配置段(比如[default2])时,关闭标记flag && /key_id/ {print $3}:标记开启状态下,匹配到key_id行时输出第3个字段(即对应的值)
方法二:grep+sed组合(更简洁)
如果追求快速实现,用grep搭配sed的组合也能完成需求:
export VAR=$(echo "$FILE_CONTENTS" | grep -A2 '\[default\]' | grep key_id | sed 's/.*= //')
逻辑说明:
grep -A2 '\[default\]':匹配[default]并输出其后续2行内容grep key_id:从结果中筛选出包含key_id的行sed 's/.*= //':删除=及之前的所有字符,只保留对应的值
内容的提问来源于stack exchange,提问作者anechkayf
相关产品推荐
相关产品推荐

