Regex / awk / etc для сканирования моего исходного кода на переводы - PullRequest
2 голосов
/ 10 февраля 2011

Я хотел бы просканировать мой источник на наличие определенных строк, таких как:

$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 не за горами.

Я ожидаю, что буду искать только один паттерн за раз.Итак, сначала я получу все «Метки» и т. Д.

note: Я знаю о POedit и т. Д. Я использую файлы CSV для статических переводов пользовательского интерфейса.Я не собираюсь это менять.Они должны быть доступны для редактирования сторонним разработчикам, которые просто хотят использовать «Excel» (дрожь ...)

Это то, что я в итоге использовал:

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

И затем удалениенежелательные "setLabel (" и ")" в текстовом редакторе.Тем не менее, я очень стремлюсь к более чистой однострочности.Ох ... Есть также код-гольф.Я должен спросить тех парней ...

Ответы [ 2 ]

2 голосов
/ 10 февраля 2011

Как насчет использования 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" {} \;
2 голосов
/ 10 февраля 2011

Рубин (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
...