我希望能够从我的代码中提取代码片段以用于文档目的。每次编译代码时我都能做到这一点,而且这是保持代码和文档(至少是片段)最新的一种简单方法。
所以我想要一个文件,里面有这样的东西:

// DOCSNIP: source_def.snip
[code]
// DOCSNIP

很明显,一个文件中可能不止一个。要点是,我想划出一个代码区域(我与语法无关),并附上一个文件名,然后将分隔符之间的内容(在本例中为“[代码]”)写入一个文件(source_def.snip)。
使用标准工具(awk/sed/grep)将这些块提取到各自的文件中最简单的方法是什么?

最佳答案

去营救!

$ awk '/\/\/ DOCSNIP:/{f=$NF} f{print > f} /\/\/ DOCSNIP$/{f=""}' file

$ head sou*

// DOCSNIP: source_def.snip
[code]
// DOCSNIP

如果文件名中有空格,则不起作用。
如果不需要分隔符行,只需对语句重新排序
$ awk '/\/\/ DOCSNIP$/{f=""} f{print > f} /\/\/ DOCSNIP:/{f=$NF}' file

只会打印两者之间的内容。

09-25 19:58