从 .cpp 文件中提取与模式匹配的“if”块

阿玛奇

我试图将表达式与特定模式匹配的 C++ 代码库中的任何“if”块复制到文本文件中。这是否可以使用 grep/awk/sed 等的某种组合?

例子

如果我有包含以下代码的文件:

//File1.cpp
if(/*matching-expression-1*/)
{
    //Code
}

//File2.cpp
if(/*non-matching-expression*/)
{
    if(/*matching-expression-2*/)
    {
        //Code
    }
}

//File3.cpp
if((/*matching-expression-3*/)
{
    if(/*non-matching-expression*/)
    {
        //Code
    }
}

我想得到如下结果:

//OutputFile.txt

File1.cpp:
if(/*matching-expression-1*/)
{
    //Code
}

File2.cpp:
if(/*matching-expression-2*/)
{
    //Code
}

File3.cpp:
if((/*matching-expression-3*/)
{
    if(/*non-matching-expression*/)
    {
        //Code
    }
}

我对//Code包含其他匹配/不匹配if块的块没问题,即使这会导致重复条目,并且不需要保留制表符缩进。

我使用 grep 匹配我想要的表达式没有问题,但这只会给我包含“if”块开头的行(这是一个好的开始!)但我不确定如何继续。

任何帮助都将不胜感激!

詹姆斯布朗

在 awk 中:

$ awk '/\*matching-expression/{f=1}f{c+=sub(/{/,"{");if(sub(/}/,"}") && --c==0)f=0;print $0}' file
if(/*matching-expression-1*/)
{
    //Code
}
    if(/*matching-expression-2*/)
    {
        //Code
    }
if((/*matching-expression-3*/)
{
    if(/*non-matching-expression*/)
    {
        //Code
    }
}

解释:

/\*matching-expression/ { f=1 }   # flag up at match
f {                               # when flag is up
    c+=sub(/{/,"{")               # { increments counter
    if(sub(/}/,"}") && --c==0)    # if count is about be 0
        f=0                       # flag down
    print $0                      # print when flag is up
}

它希望每个{}都在自己的路线上。好吧,那条线上可以有其他东西,但只有一个{}. 哦,是的,@123 的无杂散括号也适用于此,我认为这需要解析括号周围的引号。可能仍然可行,我认为。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

CUDA * .cpp文件

来自分类Dev

包括.cpp文件

来自分类Dev

多次包含cpp文件

来自分类Dev

.cpp + .cu文件的CMake文件

来自分类Dev

如何返回cpp文件的目录?

来自分类Dev

使用cpp WxWidgets写入文件

来自分类Dev

来自Cpp文件的HTTP请求

来自分类Dev

在 .cpp 中调用 .c 文件

来自分类Dev

Windows CMD:“ dir * .cpp”通配符匹配“ main.cpp_”和“ main.cpp2”

来自分类Dev

如果模式在Python中匹配,则从文件中提取数据

来自分类Dev

从文件regex中提取与给定模式匹配的段落

来自分类Dev

从两个匹配模式之间的文件中提取内容(仅从文件中提取HTML)

来自分类Dev

CMake + Cuda:以Cuda模式(--x = cu)编译cpp文件

来自分类Dev

用头文件编译不同的.cpp文件

来自分类Dev

从 .c 文件调用 .cpp 文件中的函数

来自分类Dev

linux:从文件中提取模式

来自分类Dev

CMake:如何禁用单个* .cpp文件的优化?

来自分类Dev

没有.cpp文件的C ++类?

来自分类Dev

Cpp头文件缺少变量名

来自分类Dev

Matlab的cpp文件中的矩阵乘法

来自分类Dev

在eclipse中如何创建新的cpp文件

来自分类Dev

从.cpp文件调用模板化CUDA内核

来自分类Dev

如何在.cpp文件中使用NULL?

来自分类Dev

转换Windows .cpp文件以用于Unix系统?

来自分类Dev

cpp-头文件包含错误

来自分类Dev

解决类的cpp文件中的名称冲突

来自分类Dev

.cpp到Makefile中的.o文件

来自分类Dev

在.cpp文件中字符串化

来自分类Dev

使用G ++编译CPP文件时出错