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