Bash извлекает некоторую информацию в файлах из регулярных выражений - PullRequest
0 голосов
/ 26 августа 2011

Я хочу извлечь все языковые ключи, используемые в моем приложении.

У меня есть такие файлы:

<?php

echo $localisation->lang('MDP_444'); echo $localisation->lang('MDP_666');

echo $localisation->lang('ERROR', true, false);

Я хочу запустить команду, которая возвращает:

MDP_444
MDP_666
ERROR

Я пробовал что-то вроде: grep "lang" * -R | perl -n -e 'while(/(\w*lang\((.*)\)\w*)/g) {print $1."\n"}', но это не сработало.

Заранее спасибо за помощь.

Ответы [ 3 ]

1 голос
/ 26 августа 2011

Попробуйте это:

find . -type f -name '*.php' -execdir egrep -o -- "->lang\('[^']*" {} \; 
  | sed -e "s/^.*->lang('//g"
1 голос
/ 26 августа 2011

Использовать не жадный квантификатор:

grep "lang" * -R | perl -n -e 'while(/(\w*lang\((.*?)\)\w*)/g) {print $1."\n"}'
                                           here ---^

, а также искомая подстрока находится в $2, а не $1, поэтому:

grep "lang" * -R | perl -n -e 'while(/(\w*lang\((.*?)\)\w*)/g) {print $2."\n"}'

или

grep "lang" * -R | perl -n -e 'while(/\w*lang\((.*?)\)\w*/g) {print $1."\n"}'
0 голосов
/ 26 августа 2011

Если у вас есть Ruby (1.9 +)

$ ruby -ne '$_.scan( /->lang\(\047(.*?)\047/ ).each{|x| puts x}' file
MDP_444
MDP_666
ERROR
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...