.aws/config
我正在尝试解析特定配置文件的or文件的行,.aws/credentials
例如[default]
or [prod]
。
文件示例
[default]
region = us-east-1
output = json
[nonprod]
region = us-east-1
output = json
[uat]
region = us-east-2
output = json
[prod]
region = us-east-1
output = json
是否有人有一个(aws、sed、grep 等)脚本来搜索(并显示)之后的行,例如[default]
直到下一个配置文件的开始,或者如果搜索 prod 开始[prod]
直到文件末尾?
例子
searchawsconfig default
searchawsconfig prod
答案1
如果配置文件以空格分隔,那么您可以使用 awk段落模式前任。
$ awk -v RS= -v p='[uat]' '$1 == p' yourfile
[uat]
region = us-east-2
output = json
答案2
Perl 的“段落模式”:
$ perl -00 -ne 'print if /\[default\]/' file
[default]
region = us-east-1
output = json
或者
$ perl -00 -ne 'print if /\[prod\]/' file
[prod]
region = us-east-1
output = json
~/.bashrc
您可以通过将这些行添加到 shell 的初始化文件中(例如),将其变成 shell 函数:
searchawsconfig(){
perl -00 -ne 'print if /\['"$1"'\]/' "$2"
}
然后你可以这样做:
$ searchawsconfig prod file
[prod]
region = us-east-1
output = json
答案3
抽象的:
awk '$1==p' RS= p='[default]' ./tst
使用段落模式将输入文件拆分为用“空行”(两个连续的 )分隔的记录\n
。
您可以进行正则表达式匹配(转义,[]
因为它们在正则表达式中很特殊)(用于^
标记行的开头):
awk -vRS='' '/^\[default\]/' ./tst
或者你可以进行文本匹配(完整第一的线)与:
awk -vRS='' '$1 == "[default]"' ./tst
或者(更灵活)使用命令行中设置的变量:
awk '$1==p' RS= p='[default]' ./tst
确保使用某种形式的路径,例如相对路径,./
以确保文件名被解析为文件名,即使它包含=
.
或者,使用环境变量:
RS='' SECTION='default' \
awk 'BEGIN{RS=ENVIRON["RS"]} $1=="[" ENVIRON["SECTION"] "]" ' \
./tst