如何在makefile中验证非空行和非注释行的文件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在makefile中验证非空行和非注释行的文件相关的知识,希望对你有一定的参考价值。

我想验证sample.x中的非空行和非注释行在makefile中,如果验证通过它应该打印成功,如果不是,它应该退出执行。

我正在尝试使用以下代码,但无法成功。

validate=$(sed "/^s*$/d" ${TEX_FILENAME} | sed "/^ *%/d;s/%.*//" | wc -l)
if [ "${validate}" -gt 0 ];
then
  echo "    validate success";
else
  echo "    validate not successfull";
  echo;
  exit 2;
fi
答案

这里存在许多问题,复杂性和错误。

在Makefile中,您需要将要传递给shell的任何美元符号加倍。

你的sed可能不理解你试图使用的正则表达方言。

make的目的是告诉你什么时候失败时,有一个脚本告诉你“失败”是没有意义的。

计算匹配数是否为零是一个愚蠢的反模式。只需检查是否有任何匹配。大多数正则表达式工具将在找不到匹配时以非零结果代码退出,这正是make一直关注的问题(虽然sed实际上并没有这样做;但我们在这里并不需要sed)。

validate: ${TEX_FILENAME}
    grep -q -v -e '^[[:space:]]*$$' -e '^[[:space:]]*%' $<

如果make没有停止,则该文件有效。如果您害怕忘记这是为了什么,也许可以在grep命令上方添加注释。

如果你想使用Perl正则表达式,也许看看你的系统是否有grep -P(但是要明白这是不可移植的)或者只是在Perl中重写它。

以上是关于如何在makefile中验证非空行和非注释行的文件的主要内容,如果未能解决你的问题,请参考以下文章

sed grep 用法收集示例

Python读取文件的最后一行(非空行)

如何去掉linux配置文件的注释行和空行

从源文件中删除所有注释(单行/多行)和空行[重复]

聊聊公平锁和非公平锁

目录操作习题