INI 文件是 Firefox 的配置文件.ini。我想打印下面的所有内容,包括部分标题,其中是非负整数,每个部分之间用空行分隔。还有一个可选键,它与配置文件部分下的键不同,如果存在,我也想打印它。基本上,shell 脚本只是和之前(打印、以及可选的键和值),但如果添加或删除键,这将失败,并且grep 选项不可移植。[Profile
n
]
n
Default
[Install*]
Default
grep -E 'Default=[^1]' profiles.ini
grep -A4 '^\[Profile' profiles.ini
Name
IsRelative
Path
Default
-A
下面是我的一个 hack 解决方案,它既不是惯用的 AWK,也不是健壮的 AWK:
/^[[]Profile[0123456789]{1,}[]]$/ {
print
while ((getline) > 0) {
if ($0 ~ /^$/) { # Should really break on new sections.
print ""
break
} else {
print
}
}
}
/^Default=/ {
print # Default profile path given in the Install* section.
}
示例输入:
[Profile2]
Name=default-test
IsRelative=0
Path=/home/user/ffprofiles/f9bwn86n.default-test
[Profile1]
Name=default
IsRelative=1
Path=x64qf7nv.default
Default=1
[Profile0]
Name=default-release
IsRelative=1
Path=9hv1fbkk.default-release-3426201712696
[General]
StartWithLastProfile=1
Version=2
[Install22379532B4E49482]
Default=9hv1fbkk.default-release-3426201712696
Locked=1
示例输出:
[Profile2]
Name=default-test
IsRelative=0
Path=/home/user/ffprofiles/f9bwn86n.default-test
[Profile1]
Name=default
IsRelative=1
Path=x64qf7nv.default
Default=1
[Profile0]
Name=default-release
IsRelative=1
Path=9hv1fbkk.default-release-3426201712696
Default=9hv1fbkk.default-release-3426201712696
我怎样才能更简洁、更正确地做到这一点?解决方案实际上不必使用 AWK,但我认为 awk 比 sed 或任何其他 Unix 实用程序更适合这种情况。但是,解决方案必须是可移植的并且符合 POSIX 标准。提前谢谢您。