我需要从具有典型结构的 ini 文件中检索键的值:
[abcd]
key1=a
key2=b
[efgh]
key1=c
key2=d
[hijk]
key1=e
key2=f
Run Code Online (Sandbox Code Playgroud)
关键名称在不同的部分中重复,并且部分的命名/顺序没有一致。我怎么能从 efgh 中找到 key1?如果我 grep 然后我会找到所有的 key1(而且我不知道这些部分的顺序)。
我怀疑 sed 或 awk 可以做到这一点,但我找不到它...
这可能是一个开始:
awk -F'=' -v section="[efgh]" -v k="key1" '
$0==section{ f=1; next } # Enable a flag when the line is like your section
/\[/{ f=0; next } # For any lines with [ disable the flag
f && $1==k{ print $0 } # If flag is set and first field is the key print key=value
' ini.file
Run Code Online (Sandbox Code Playgroud)
你传递两个变量,section
和k
。section
需要包含您要查看的部分。k
应该包含key
您试图获取的价值。
查找key1
下部分的值[efgh]
:
$ awk -F'=' -v section="[efgh]" -v k="key1" '
$0==section{ f=1; next }
/\[/{ f=0; next }
f && $1==k{ print $0 }
' ini.file
key1=c
Run Code Online (Sandbox Code Playgroud)
查找key2
下部分的值[hijk]
:
$ awk -F'=' -v section="[hijk]" -v k="key2" '
$0==section{ f=1; next }
/\[/{ f=0; next }
f && $1==k{ print $0 }
' ini.file
key2=f
Run Code Online (Sandbox Code Playgroud)
使用 sed
sed -r ':a;$!{N;ba};s/.*\[efgh\][^[]*(key1=[^\n]*).*/\1/' file
key1=c
Run Code Online (Sandbox Code Playgroud)
其它的办法
sed -nr '/\[efgh\]/,/\[/{/key1/p}' file
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
7015 次 |
最近记录: |