开发者

perl one line + exactly match [duplicate]

This question already has answers here: Closed 12 years ago.

Possible Duplicate:

perl + one line smart perl command, in place grep to match unusual characters + full match

Ai all

I need to match exactly the PARAMETER string with the following perl line:

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

As the following examples, showing down

I try to match: node_name

but I get all node_name combinations names from the file,

The same about 1.1.1. and ho开发者_开发知识库st_1.A etc…

how to match exactly the following PARAMETERS ? from the file , what need to change in my perl syntax in order to give the right match?

 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


How can This line:

param2=a anode_name

being grepped for node_name yield a anode_name

while this line:

param7=1.1.1.11

being grepped for 1.1.1.1 yield param7=1.1.1.11

It seems to me that either the first should yield param2=a anode_name or the second should yield 1.1.1.11


You should try to put word boundaries (\b) bto match exactly:

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


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

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜