2016-07-05 95 views
0

我想打印在命令行中的所有比赛是这样的:如何让perl打印命令行中的所有匹配项?

perl -0777 -nle 'print "$1\n" if /ModelProxy\("([\w*.]+)"\);/g' test.txt 

test.txt这样的:

var orderform = new ModelProxy("orderform.b2b.*"); 
var orderform2b = new ModelProxy("web.orderform_2b.*"); 
var o2oOrderform = new ModelProxy("orderform.o2o.*"); 
var logistics = new ModelProxy("supply.logistics.*"); 
var tyreurgent = new ModelProxy("o2o.tyreurgent.*"); 
var common = new ModelProxy("web.common.file.*"); 
var cartPipeData = load("pipe/cartPipeData"); 
var tsCartPipeData = load("pipe/tsCartPipeData").default; 

我想要的是:

orderform.b2b.* 
web.orderform_2b.* 
orderform.o2o.* 
supply.logistics.* 
o2o.tyreurgent.* 
web.common.file.* 

,但我得到的第一个:

orderform.b2b.* 

回答

2

if //g没有意义。您正在寻找while //g

perl -0777ne'print "$1\n" while /ModelProxy\("([\w*.]+)"\);/g' test.txt 

您是否期望在比赛中途换行?如果不是,则不需要将整个文件读入内存。

perl -nle'print for /ModelProxy\("([\w*.]+)"\);/g' test.txt 
相关问题