以下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
答案 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