2010-11-18 75 views
-3

可能重複:
perl + one line smart perl command, in place grep to match unusual characters + full matchperl的一條線+精確匹配

艾都

我需要準確的參數字符串用下面的Perl行匹配:

cat file | perl -nle 'print if /\Q$ENV{PARAMETER}/' 

如下面的例子,顯示了下來

我盡力配合:NODE_NAME

,但我得到的所有節點名稱的組合名稱從文件,

同有關1.1.1。和host_1.A等...

如何完全匹配以下參數?從文件 ,需要改變我的Perl語法才能給出正確的匹配?

more file 
param1=uplicateParam node_name 
param2=a anode_name 
param3=bnode_name 
param4node_name 
param5=1.node_name 
param6=11.11.11.11 
param7=1.1.1.11 
param8=[1234] 
param9=* * * [@] 
param10=11.1.1.11 
param11=host_1.A 
param12=old.host_1.A 


example1 

PARAMETER=node_name 
export PARAMETER 
cat file | perl -nle 'print if /\Q$ENV{PARAMETER}/' 

DuplicateParam node_name 
a anode_name 
bnode_name 
node_name 
1.node_name 


Example2 


PARAMETER=1.1.1.1 
export PARAMETER 
cat file | perl -nle 'print if /\Q$ENV{PARAMETER}/' 

param7=1.1.1.11 
param10=11.1.1.11 

example3 

PARAMETER=host_1.A 
cat file | perl -nle 'print if /\Q$ENV{PARAMETER}/' 
export PARAMETER 

host_1.A 
old.host_1.A 
+0

無法複製,因爲這個問題是關於perl匹配,第二我沒有得到答案,第三我必須給更多的例子 – jon 2010-11-18 06:27:50

回答

0

這怎麼行:

param2=a anode_name 

被grepped爲node_name產量a anode_name

,而這條線:

param7=1.1.1.11 

被grepped爲1.1.1.1產量param7=1.1.1.11

在我看來,要麼首先應產生param2=a anode_name或第二應該產生1.1.1.11

+0

對不起,這不是答案, – jon 2010-11-18 06:28:52

+0

@rster - 什麼需要改變我的Perl語法,以便給出正確的匹配? – jon 2010-11-18 06:30:57

+0

@jon,我知道這不是答案,因爲你要求相互矛盾的輸出。我個人認爲,如果(/^param \ d + =(。*($ ENV {PARAMETER})。*)/' – tster 2010-11-18 06:34:51

0

你應該儘量把單詞邊界(\b)BTO正好匹配:

cat file | perl -nle 'print if /\b\Q$ENV{PARAMETER}\b/' 
+1

'應該打印$ 1'用'\ b'指定的邊界常常無法做到[大多數人認爲他們](http://stackoverflow.com/questions/4213800/is-there-something-like-a-counter-variable-in-regular-expression-replace/4214173#4214173)。 – tchrist 2010-11-18 13:31:13

0
perl -nlE 'say if /\Aparam\d+=\Q$ENV{PARAMETER}\E\s*\z/' file