Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux perl+;完全匹配IP地址,但忽略空格和制表符_Linux_Perl_Shell_Ksh - Fatal编程技术网

Linux perl+;完全匹配IP地址,但忽略空格和制表符

Linux perl+;完全匹配IP地址,但忽略空格和制表符,linux,perl,shell,ksh,Linux,Perl,Shell,Ksh,下面的perl线性代码将与IP地址完全匹配 perl -ne 'BEGIN{$ip=shift(@ARGV);} print if /^\Q$ip\E$/;' "$IP_ADDRESS" $FILE 问题是,如果在$IP_地址之前或之后有空格或制表符,我们无法通过以下perl代码进行匹配 为了忽略空格和制表符,请告知我的代码需要添加哪些内容 来自我的linux机器的示例 $ echo "192.9.200.1" | perl -ne 'BEGIN{$ip=shift}

下面的perl线性代码将与IP地址完全匹配

perl -ne 'BEGIN{$ip=shift(@ARGV);} 
    print if /^\Q$ip\E$/;' "$IP_ADDRESS"  $FILE
问题是,如果在$IP_地址之前或之后有空格或制表符,我们无法通过以下perl代码进行匹配

为了忽略空格和制表符,请告知我的代码需要添加哪些内容

来自我的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

试试这个正则表达式

 /\s*\Q$ip\E\s*$/
\s*匹配0个或多个空白字符

请尝试以下方法:

print if /(^|\s)\Q$ip\E(\s|$)/;
你可以用


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

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

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

您是否尝试过
perldoc perlre
\s*
匹配可选空白,因此
/^\s*\Q$ip\E\s*$/
.grep“192.9.200.1”文件192.9.200.1 1.1 perl-ne'BEGIN{$ip=shift(@ARGV);}如果/^\s*\Q$ip\E\s*$/,请打印“192.9.200.1”文件,没有结果,文件中的IP但是perl命令没有打印任何内容!也许现在它忽略了空格,但它并不完全匹配,例如:echo“192.9.200.1”| perl-ne'BEGIN{$ip=shift(@ARGV);}print if/\Q$ip\E/;'“192.9.200”,它还打印了192.9.200.1请参见我的新预期结果部分perl-ne'BEGIN{$ip=shift@ARGV;}s/^\s+|\s+$//g;如果/^\Q$ip\E$/;”打印“192.9.200.1”文件-不工作我的IP 192.9.200.1文件中有空格,但仍然不匹配我无法使用它,因为我没有模块(我无法在我的linux机器上安装新模块)
perl -ne '
    BEGIN { $ip = shift @ARGV; }
    s/^\s+|\s+$//g;
    print if /^\Q$ip\E$/; 
' "$IP_ADDRESS"  $FILE