Linux perl+;完全匹配IP地址,但忽略空格和制表符
下面的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 -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