为数百个.cpp&中的所有引用字符串添加_T宏。 .h文件

时间:2014-03-22 17:25:26

标签: regex perl bash

我需要在所有.cpp&中包装所有双引号字符串。带有宏_T()

的目录中的.h文件

所有文件都是unicode。

任何人都可以帮我写一个perl或bash shell吗?

我知道perl应该很棒。我只知道一点bash shell并不能完全让它自动运行。

现在我在sublime Text2中使用^(?!#)(.*)(".*?")$1_T($2),我不知道为什么它只是替换的一部分。 (有些字符串添加_T()而有些字符串不添加)。而且不应该替换像readme.txt * .poj等文件。

避免重复替换,我知道\b是单词边界。但^(?!#).*\b(!_T\(")(".*?")\b似乎无效。

1 个答案:

答案 0 :(得分:1)

这是一个比较难以解决的问题,但是快速解决方案可能如下:

use strict;
use warnings;

for my $file (glob("*.cpp"), glob("*.h")) {
    local @ARGV = $file;
    local $^I = '.bak';
    die "Backup already exists for $file" if -e "$file$^I";
    while (<>) {
        if (! /^#include/) {
            s/("(?:(?>[^"\\]+)|\\.)*")/_T($1)/g;
        }
        print;
    }
    # unlink "$file$^I"; # If you want to delete the backup
}

我当然会在测试期间将for循环更改为单个文件:

for my $file ("single_file_to_test.cpp") {

如果您要删除放置在.bak中的备份,则可以取消注释unlink命令