在检查 ini 文件是否存在于预期的位置之后(我已经学会了如何执行此操作),我想检查文件的格式是否正确。我想验证文件中任意数量的“站点”条目,并检查每个条目是否遵循下面的模式,包括新行。
1| [site1]
2| shortcut=x1
3| site=example1.com
4| theme=alpha
5|
6| [site2]
7| shortcut=x2
8| site=example2.com
9| theme=beta
10|
我在读取各个值时对其进行了验证。我只是想在处理文件之前确保模式正确,回显模式中断的行号(如果不正确)。
答案1
你可以试试克鲁迪尼
crudini --get file.ini |
while read section; do
test "$(crudini --get t.ini $section | paste -d, - - -)" = \
'shortcut,site,theme' ||
echo error in section $section
done
答案2
作为一个可能的选择:
BEGIN{
FS="="
}
{
if ($1~/\[.*\]/) {
in_section=1;
sec_name=$1
next
};
if ($1~/^$/) {
if ((c!=3) || (err)) {
print "error in section "sec_name
};
in_section=0;
sec_name="";
c=0;
err=0
};
if (in_section) {
if ($1=="shortcut") {c++; next};
if ($1=="site") {c++; next};
if ($1=="theme") {c++; next};
err=1
};
}
END{
if (in_section) {
print "error in section "sec_name
};
}