m4 - 有没有办法使用 m4 从包含的文件中包含一部分行?
问题描述
使用 m4 时,有没有办法从包含的文件中包含一部分行?类似的东西include(`source.cpp', 12-15)?
我正在使用reveal.js 创建一个降价演示文稿,并希望包含代码示例。在许多情况下,我想包含源文件中的一部分行。在这些情况下,我创建了文件的副本并将每个副本修剪为每次包含时应包含的内容。然而,这会导致多个源文件,如果公共行发生更改,则需要手动更新这些源文件。我想在多个地方包含同一个文件,指定每个包含的行。
我曾考虑过使用 sed 但如果可能的话想避免使用外部工具。我还希望能够使用 m4-I
选项指定包含的文件夹。
欢迎提出关于使用外部工具的 m4 宏的建议,即使只使用 m4 的答案值得赞赏。
解决方案
可以做!
define(`repeat_newline',`ifelse($1,0,,`[^
]*
repeat_newline(decr($1))')')dnl
define(`quote',``$*'')dnl
define(`include_lines',`regexp(quote(include($1)),^repeat_newline($2)`\('repeat_newline($3)`\)',`\1')')
用法:include_lines(my_file.txt, 2, 5)
从第三行开始读取 5 行(2
零索引)。它扩展包含文件中的宏,就像include
.
推荐阅读
- javascript - Javascript 到 PHP 的输入是空的。现场搜索PHP麻烦
- c# - 如何在revit api c#中创建屋顶而不创建墙壁
- java - 资源无法使用 maven-dependency-plugin 正确复制
- python - 尝试在 onedrive SDK 上进行身份验证时列出索引超出范围 - python
- android - 在地图中获取用户位置的程序出错
- mongodb - Mongo Aggregate $and in $match 不返回结果
- javascript - 如何在页面显示给用户之前修复尺寸?
- visual-studio - 调试在 Docker 容器中运行的应用程序所需的提升权限?
- git - 如何使用 Git 合并多个 Qt Creator UI
- javascript - 如何在不使用 JQuery 的情况下将类添加到 HTML 字符串中的元素