正则表达式/ awk / etc用于扫描我的源代码以进行翻译

时间:2011-02-10 11:41:52

标签: regex unix grep translate

我想扫描某些行的来源,例如:

$obj->setLabel('output this text')->someOtherMethod(etc);

或:

$this->view->title = "I want this text";

显然代码是PHP。我正在使用Zend Framework。这并不重要。

我正在运行linux并了解管道。我猜我可以管道:

grep --include=*.php -R 'setLabel(' .
进入awk或其他什么。我只是希望每个“一个或多个”字符输出在它自己的行上用引号括起来,以逗号结尾。 CSV翻译文件就在不远处。

我只期望一次搜索一个模式。所以首先我会得到所有“标签”等。

注意: 我知道POedit等。我正在使用CSV文件进行静态UI翻译。我不打算改变它。他们需要由想要使用“Excel”(不寒而栗......)的第三方编辑。

这是我最终使用的:

grep -oh --include=*.php -R -E "setLabel\('[^']*'\)" . > labels.txt

然后在文本编辑器中删除不需要的“setLabel(”和“)”。但是,我非常渴望更清洁的单线。哦......还有代码高尔夫球。我应该问那些家伙......

2 个答案:

答案 0 :(得分:2)

红宝石(1.9 +)

说您要搜索setLabel

$ ruby -ne 'puts $_.scan(/.*setLabel\(\047(.[^)]*)\047/)' file
output this text

说您要搜索view-title

$ ruby -ne 'puts $_.scan(/.*view->title\s+=\s+\042(.[^"]*)\042/)' file
I want this text

答案 1 :(得分:2)

如何使用findsed

find . -type f -name '*.php' -exec sed -ne "s/.*setLabel('\([^']\+\)').*/\1/p" {} \;

find . -type f -name '*.php' -exec sed -ne "s/.*view->title = \"\([^\"]\+\)\".*/\1/p" {} \;