我需要检查一些配置文件的语法。
配置格式如下:
[sect1]
sect1file1
sect1file2
[sect1_ends]
[sect2]
sect2file1
sect2file2
[sect2_ends]
我的要求是检查方括号sect1
内的[sect1]
的开头,然后检查文件sect1file1
和sect1file2
是否存在,然后检查通过在方括号sect1
内阅读sect1_ends
来结束[sect1_ends]
。然后对sect2
重复相同的操作,依此类推。
已经有一组允许的部分名称。我的目标是检查部分名称是否在列表中,以及语法是否没有任何错误。
我尝试使用
perl -lne 'print $1 while (/^\[(.*?)\]$/g)' <config filename>
但我不确定如何检查并查看该文件。
答案 0 :(得分:1)
我很高兴看到你尝试过。再试一次这个原型:
while read -r line; do
if [ ${#line} -eq 0 ]; then
continue # ignore empty lines
fi
if [[ "${line}" = \[*\] ]]; then
echo "Line with [...]"
if [ -n "${inSection}" ]; then
if [ "${line}" = "${inSection/]/_ends]}" ]; then
echo "End of section"
unset inSection
else
echo "Invalid endtag ${line} while processing ${inSection}"
exit 1
fi
else
echo "Start of new section ${line}"
inSection="${line}"
fi
else
if [ -f "${line}" ]; then
echo "OK file ${line}"
else
echo "NOK file ${line}"
fi
fi
done < inputfile
答案 1 :(得分:0)
您的解决方案看起来不错,但是-n reads lines from standard input(STDIN)。您需要将配置文件提供给STDIN以将其传递给您的脚本:
perl -lne 'print $1 while (/^\[(.*?)\]$/g)' <config.ini
替代选项将使用-p。