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

时间:2011-08-26 15:33:10

标签: bash shell unix

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

我有这样的文件:

<?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 个答案:

答案 0 :(得分: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"}'

答案 1 :(得分:1)

试试这个:

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

答案 2 :(得分:0)

如果你有Ruby(1.9 +)

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