【发布时间】:2016-08-17 03:52:35
【问题描述】:
我需要检查一些配置文件的语法。
配置格式如下:
[sect1]
sect1file1
sect1file2
[sect1_ends]
[sect2]
sect2file1
sect2file2
[sect2_ends]
我的要求是检查sect1 的开头,它在方括号[sect1] 内,然后检查文件sect1file1 和sect1file2 是否存在,然后通过阅读@ 检查sect1 的结尾987654327@ 内方括号[sect1_ends]。然后对sect2 重复相同的操作,以此类推。
已经有一组允许的部分名称。我的目标是检查部分名称是否在列表中,以及语法是否没有任何错误。
我尝试过使用
perl -lne 'print $1 while (/^\[(.*?)\]$/g)' <config filename>
但我不确定如何检查和浏览文件。
【问题讨论】:
-
首先弄清楚你的支票是什么。然后决定工具。将
grep用于这些部分并与部分列表进行比较是否可以,或者您是否应该使用awk的perl制作一个小程序。 -
感谢@walter,但 grep 无济于事,因为我必须在 start 检查 sect1 是否包含在正方形中括号并出现在允许的部分名称列表中,在验证之后,我需要检查为该 sect1 定义的 files 是否存在,最后检查 sect1 已在方括号内使用 sect1_ends 正确终止。然后跟踪 sect1 语法是否 有效 并继续 sect2 即使它是 invalid 最后我需要打印所有无效的语法部分以便用户更正。
-
尝试使用
while read -r linel do ... done < inputfile之类的东西,在你的循环中使用inSection="sect1"和if [ -f "${inSection}file1" ]之类的东西 -
非常感谢@walter 我已经开始逐行阅读
while并根据内容决定应该做什么,但仍然跟踪无效sect并继续通过其他零件有点复杂。