Regex / awk / etc pour parsingr mon code source pour les traductions

Je voudrais scanner ma source pour certaines lignes telles que:

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

ou:

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

De toute évidence, le code est PHP. J’utilise Zend Framework. Cela n’a pas vraiment d’importance.

Je suis sous Linux et je comprends les tuyaux. Je suppose que je pourrais faire un tuyau:

 grep --include=*.php -R 'setLabel(' . 

dans awk ou autre chose. Je veux juste que chacun des caractères “un ou plusieurs” soit imprimé sur sa propre ligne, entouré de guillemets. Les fichiers de traduction CSV ne sont pas loin.

Je m’attends seulement à rechercher un modèle à la fois. Donc, tout d’abord, j’obtiens toutes les “étiquettes”, etc.

note: je connais POedit, etc. J’utilise des fichiers CSV pour les traductions statiques de l’interface utilisateur. Je ne vais pas changer cela. Ils doivent être modifiables par un tiers qui veut simplement utiliser “Excel” (frémir …)

C’est ce que j’ai fini par utiliser:

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

Et puis en supprimant le “setLabel (” et “)” indésirable dans un éditeur de texte. Cependant, je suis très attaché à un one-liner plus propre. Oh … Il y a aussi le code-golf. Je devrais demander à ces gars …

Que diriez-vous d’utiliser find et sed :

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

et

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

Rubis (1.9+)

dis que tu veux chercher setLabel

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

dites que vous voulez rechercher le titre de la view-title

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