我需要在所有.cpp&中包装所有双引号字符串。带有宏_T()
的目录中的.h文件所有文件都是unicode。
任何人都可以帮我写一个perl或bash shell吗?
我知道perl应该很棒。我只知道一点bash shell并不能完全让它自动运行。
现在我在sublime Text2中使用^(?!#)(.*)(".*?")
和$1_T($2)
,我不知道为什么它只是替换的一部分。 (有些字符串添加_T()而有些字符串不添加)。而且不应该替换像readme.txt * .poj等文件。
避免重复替换,我知道\b
是单词边界。但^(?!#).*\b(!_T\(")(".*?")\b
似乎无效。
答案 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
命令