我想扫描某些行的来源,例如:
$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(”和“)”。但是,我非常渴望更清洁的单线。哦......还有代码高尔夫球。我应该问那些家伙......
答案 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)
如何使用find
和sed
:
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" {} \;