如何将类定义输出到唯一的文本文件?

时间:2016-10-01 05:50:17

标签: bash awk sed

我有一个包含多个类声明的头文件(所有类都以BusType开头)...如何解析每个类并将其输出到自己的文本文件中?

class BusTypeA
{
    struct DummyA
    {
        //etc
    };
    //etc
};

class BusTypeB
{
    struct DummyB
    {
        //etc
    };
    //etc
};

class BusType1
{
    struct Dummy1
    {
        //etc
    };
    //etc
};

//many more classes...

也许对文件进行第一次传递,将所有BusTypes收集到变量中并在for循环中执行类似的操作?

sed -n '/class BusTypeA/,/class BusTypeB/ p' >> BusTypeA.txt
sed -n '/class BusTypeB/,/class BusType1/ p' >> BusTypeB.txt
...

3 个答案:

答案 0 :(得分:4)

您可以试试awk

awk '/^class/{f=$2;p=1} p&&/^};/{print>>f;p=0} p{print>>f}' file

正如@ hek2mgl的评论所示,

awk '/^class/{f=$2;p=1} p&&/^};/{print>>f;close(f);p=0} p{print>>f;close(f);}'

答案 1 :(得分:3)

尝试csplit

csplit input.txt '/^class BusType.*/' {*}

c 内容拆分实用程序。您可以定义正则表达式模式和应该进行的拆分次数 - {*}表示无限制

答案 2 :(得分:1)

另一个awk

$ awk -v RS= '{print > $2".txt"}' file

取决于分隔类定义的空行。将awk设置为段落模式,将当前记录打印到以第二个字段命名的文件(加后缀)。