如何在Perl中进行条件替换?

时间:2009-11-08 13:24:18

标签: regex perl

我想转换如下:

bool foo(int a, unsigned short b)
{
    return pImpl->foo(int a, unsigned short b);
}

为:

bool foo(int a, unsigned short b)
{
    return pImpl->foo(a, b);
}

换句话说,我需要删除不是函数定义的行上的类型定义。

我正在使用Linux。

以下内容删除了两行中的类型:

perl -p -e 's/(?<=[,(])\s*?(\w+ )*.*?(\w*)(?=[,)])/ $2/g;' fileName.cpp

如何只更换以“return”开头的行,并在同一行上进行多项更改?

2 个答案:

答案 0 :(得分:8)

添加if声明:

perl -p -e 's/regex/replacement/g if /^\s*return/;' fileName.cpp

或者,您可以利用传递给perl -p的字符串是循环体:

perl -p -e 'next unless /^\s*return/; s/add/replacement/g;' filename.cpp

答案 1 :(得分:0)

你可以放一些东西来匹配 - &gt;在你的正则表达式中所以它与函数定义不匹配。更好的方法是编写一个逐行解析并拒绝没有 - >的行的脚本。在进行替换之前。