Bash从正则表达式中提取文件中的一些信息

Bash从正则表达式中提取文件中的一些信息,bash,shell,unix,Bash,Shell,Unix,我想提取应用程序中使用的所有语言密钥 我有这样的文件: <?php echo $localisation->lang('MDP_444'); echo $localisation->lang('MDP_666'); echo $localisation->lang('ERROR', true, false); 我试过这样的方法:grep“lang”*-R | perl-n-e'while(/(\w*lang\(.*))\w*)/g){print$1.\n“}”,但它

我想提取应用程序中使用的所有语言密钥

我有这样的文件:

<?php

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

echo $localisation->lang('ERROR', true, false);
我试过这样的方法:
grep“lang”*-R | perl-n-e'while(/(\w*lang\(.*))\w*)/g){print$1.\n“}”
,但它不起作用


提前感谢您的帮助。

使用非贪婪量词:

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"}'

试试这个:

find . -type f -name '*.php' -execdir egrep -o -- "->lang\('[^']*" {} \; 
  | sed -e "s/^.*->lang('//g"
如果你有Ruby(1.9+)


…|perl-nle'print for/\w*lang\(.*?)\w*/g
就足够了,但我真的不信任那些
\w*
实例。
grep "lang" * -R | perl -n -e 'while(/\w*lang\((.*?)\)\w*/g) {print $1."\n"}'
find . -type f -name '*.php' -execdir egrep -o -- "->lang\('[^']*" {} \; 
  | sed -e "s/^.*->lang('//g"
$ ruby -ne '$_.scan( /->lang\(\047(.*?)\047/ ).each{|x| puts x}' file
MDP_444
MDP_666
ERROR