如何 grep 以 [default] 开头的特定配置文件的行

如何 grep 以 [default] 开头的特定配置文件的行

.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

相关内容