linux - 提取文件中两个分隔符之间的文本并写入给定文件名

标签 linux shell awk sed grep

我希望能够从我的代码中提取片段以用于文档目的。每次我以低廉的成本编译代码时,我都可以这样做,这是使代码和文档(至少是片段)保持最新的简单方法。

所以我想要一个文件source.cc,里面有这样的东西:

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

很明显,一个文件中可能不止一个。要点是我想划定一个代码区域(我不喜欢语法),以及一个文件名来粘贴它,并在定界符之间写下内容(在这种情况下为“[代码]”)到文件 (source_def.snip)。

使用标准工具 (awk/sed/grep) 将这些 block 提取到各自文件中的最简单方法是什么?

最佳答案

awk 助您一臂之力!

$ 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

只会打印中间的内容。

关于linux - 提取文件中两个分隔符之间的文本并写入给定文件名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51935622/

相关文章:

linux - 解析路由以获取网关/DNS

python - 在 C 中用另一个函数名称批量替换函数名称

linux - 在子目录中搜索相同的文件并替换所有子目录中的字符串

linux - 为什么我在虚拟机中删除大文件时主机上的磁盘镜像文件不会减少?

linux - 使用变量替换创建文件并替换字符串中的某些字符

linux - Shell 脚本 - Linux - 列出空目录

linux - 为什么非图片代码不能完全使用运行时修复程序进行ASLR?

vim - 如何在 Vim 窗口中打开 Shell?

bash - AWK 如何执行和读取记录和字段

bash - 如何用另一个文件的映射值替换 csv 文件中的第 n 个字段?