perl +完全匹配IP ADDRESS但忽略空格和TABS

时间:2013-05-01 08:15:34

标签: linux perl shell ksh

以下perl线性代码将完全匹配IP地址

perl -ne 'BEGIN{$ip=shift(@ARGV);} 
    print if /^\Q$ip\E$/;' "$IP_ADDRESS"  $FILE

问题是我们无法通过以下perl代码匹配,如果在$ IP_ADDRESS之前或之后的空格或TAB

请告知我需要添加到我的代码中以忽略空格和标签?

来自我的linux机器的例子

$ echo "192.9.200.1" |
    perl -ne 'BEGIN{$ip=shift} 
        print if/^\Q$ip\E$/;' "192.9.200.1"
192.9.200.1  ( MATCH )

$ echo " 192.9.200.1" |
    perl -ne'BEGIN{$ip=shift} 
        print if/^\Q$ip\E$/;' "192.9.200.1"
NO MATCH

echo "192.9.200.1 " |
    perl -ne'BEGIN{$ip=shift}
        print if/^\Q$ip\E$/' "192.9.200.1"
NO MATCH

预期结果

echo "192.9.200.1 "|
    perl -ne'BEGIN{$ip=shift}
        print if/^\Q$ip\E$/;' "192.9.200.1"
should MATCH

echo "192.9.200.1"|
    perl -ne'BEGIN{$ip=shift}
        print if/^\Q$ip\E$/;' "192.9.200"
should NOT MATCH

echo "192.9.200.1"|
    perl -ne'BEGIN{$ip=shift}
        print if/^\Q$ip\E$/;' "192.9.200."
should NO MATCH

4 个答案:

答案 0 :(得分:1)

试试这个:

print if /(^|\s)\Q$ip\E(\s|$)/;

答案 1 :(得分:0)

尝试使用此正则表达式

 /\s*\Q$ip\E\s*$/

\ s *匹配0个或更多空白字符

答案 2 :(得分:0)

您可以使用Regexp::Common::net

perl -MRegexp::Common=net -nE 'say +($_=~/^$RE{net}{IPv4}{-keep}$/)?q(MATCH):q(NO MATCH)'
192.9.200.1
MATCH
        192.9.200.1
NO MATCH
    192.999.200.1
NO MATCH

这具有检测IP地址的无效模式的额外优势。

答案 3 :(得分:0)

您可以先修剪前导和尾随空格:

perl -ne '
    BEGIN { $ip = shift @ARGV; }
    s/^\s+|\s+$//g;
    print if /^\Q$ip\E$/; 
' "$IP_ADDRESS"  $FILE