2011-08-26 72 views
0

我想提取在我的應用程序中使用的所有語言的鍵。Bash從正則表達式提取文件中的一些信息

我所擁有的文件是這樣的:

<?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"}'但它沒有工作。

在此先感謝您的幫助。

回答

1

試試這個:

find . -type f -name '*.php' -execdir egrep -o -- "->lang\('[^']*" {} \; 
    | sed -e "s/^.*->lang('//g" 
+0

真棒,這真棒! – julesbou

1

使用非貪婪量詞:

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

'... | perl -nle'print for/\ w * lang \((。*?)\)\ w */g'就足夠了,但我真的不相信這些'\ w *'實例。 – tchrist

0

如果你有紅寶石(1.9+)

$ ruby -ne '$_.scan(/->lang\(\047(.*?)\047/).each{|x| puts x}' file 
MDP_444 
MDP_666 
ERROR 
相關問題