比较列表与字符串并在字符串中打印列表的匹配行
Comparing list with string and printing matching line of list in string
我正在尝试将列表与字符串文本进行比较,并打印与列表中的元素匹配的行
我试过下面的代码,但得到的 IP 地址不在列表中的行
acl = """
access-list access_myside_in line 1 extended permit tcp host 18.1.1.12 host 15.2.3.4 eq ssh
access-list access_myside_in line 2 extended permit tcp host 18.1.2.2 host 15.1.3.4 eq ssh
access-list access_myside_in line 3 extended permit tcp host 16.1.1.2 host 5.2.23.4 eq ssh
access-list access_myside_in line 4 extended permit tcp host 18.2.1.2 host 15.2.1.4 eq ssh
access-list access_myside_in line 5 extended permit tcp host 10.1.1.2 host 15.2.3.14 eq ssh
access-list access_myside_in line 6 extended permit tcp host 13.1.1.2 host 10.2.3.4 eq ssh
access-list access_myside_in line 7 extended permit tcp host 18.1.1.2 host 12.2.3.4 eq ssh
access-list access_myside_in line 8 extended permit tcp host 12.1.1.2 host 9.2.3.4 eq ssh
access-list access_myside_in line 9 extended permit tcp host 15.1.1.2 host 15.22.3.4 eq ssh
access-list access_myside_in line 10 extended permit tcp host 5.1.1.2 host 11.2.3.4 eq ssh
access-list access_myside_in line 19 extended permit tcp host 1.1.1.2 host 15.2.13.4 eq ssh
access-list access_myside_in line 25 extended permit tcp host 11.1.1.2 host 15.12.3.4 eq ssh
access-list access_myside_in line 30 extended permit tcp host 8.1.1.2 host 5.2.3.4 eq ssh
access-list access_myside_in line 31 extended permit tcp host 111.1.1.2 host 15.2.3.40 eq ssh
access-list access_myside_in line 33 extended permit tcp host 18.1.11.2 host 17.2.3.4 eq ssh
access-list access_myside_in line 40 extended permit tcp host 19.1.1.2 host 55.2.3.4 eq ssh
access-list access_myside_in line 49 extended permit tcp host 20.1.1.2 host 80.2.3.4 eq ssh
"""
myip = ['18.1.1.2', '20.1.1.2', '5.2.3.4', '15.2.3.4', '9.2.3.4', '8.1.1.2 ', '11.2.3.4']
acl_match = []
for a in myip:
for b in acl.splitlines():
if a in b:
acl_match.append(b)
print(acl_match)
['access-list access_myside_in line 7 extended permit tcp host 18.1.1.2 host 12.2.3.4 eq ssh',
'access-list access_myside_in line 49 extended permit tcp host 20.1.1.2 host 80.2.3.4 eq ssh',
'access-list access_myside_in line 1 extended permit tcp host 18.1.1.12 host 15.2.3.4 eq ssh',
'access-list access_myside_in line 30 extended permit tcp host 8.1.1.2 host 5.2.3.4 eq ssh',
'access-list access_myside_in line 31 extended permit tcp host 111.1.1.2 host 15.2.3.40 eq ssh',
'access-list access_myside_in line 40 extended permit tcp host 19.1.1.2 host 55.2.3.4 eq ssh',
'access-list access_myside_in line 1 extended permit tcp host 18.1.1.12 host 15.2.3.4 eq ssh',
'access-list access_myside_in line 31 extended permit tcp host 111.1.1.2 host 15.2.3.40 eq ssh',
'access-list access_myside_in line 8 extended permit tcp host 12.1.1.2 host 9.2.3.4 eq ssh',
'access-list access_myside_in line 7 extended permit tcp host 18.1.1.2 host 12.2.3.4 eq ssh',
'access-list access_myside_in line 30 extended permit tcp host 8.1.1.2 host 5.2.3.4 eq ssh',
'access-list access_myside_in line 10 extended permit tcp host 5.1.1.2 host 11.2.3.4 eq ssh']
如果格式一致,您可以在每一行中搜索每个 ip(前后有一个空格),或者您可以使用正则表达式。
acl = r"""
access-list access_myside_in line 1 extended permit tcp host 18.1.1.12 host 15.2.3.4 eq ssh
access-list access_myside_in line 2 extended permit tcp host 18.1.2.2 host 15.1.3.4 eq ssh
access-list access_myside_in line 3 extended permit tcp host 16.1.1.2 host 5.2.23.4 eq ssh
access-list access_myside_in line 4 extended permit tcp host 18.2.1.2 host 15.2.1.4 eq ssh
access-list access_myside_in line 5 extended permit tcp host 10.1.1.2 host 15.2.3.14 eq ssh
access-list access_myside_in line 6 extended permit tcp host 13.1.1.2 host 10.2.3.4 eq ssh
access-list access_myside_in line 7 extended permit tcp host 18.1.1.2 host 12.2.3.4 eq ssh
access-list access_myside_in line 8 extended permit tcp host 12.1.1.2 host 9.2.3.4 eq ssh
access-list access_myside_in line 9 extended permit tcp host 15.1.1.2 host 15.22.3.4 eq ssh
access-list access_myside_in line 10 extended permit tcp host 5.1.1.2 host 11.2.3.4 eq ssh
access-list access_myside_in line 19 extended permit tcp host 1.1.1.2 host 15.2.13.4 eq ssh
access-list access_myside_in line 25 extended permit tcp host 11.1.1.2 host 15.12.3.4 eq ssh
access-list access_myside_in line 30 extended permit tcp host 8.1.1.2 host 5.2.3.4 eq ssh
access-list access_myside_in line 31 extended permit tcp host 111.1.1.2 host 15.2.3.40 eq ssh
access-list access_myside_in line 33 extended permit tcp host 18.1.11.2 host 17.2.3.4 eq ssh
access-list access_myside_in line 40 extended permit tcp host 19.1.1.2 host 55.2.3.4 eq ssh
access-list access_myside_in line 49 extended permit tcp host 20.1.1.2 host 80.2.3.4 eq ssh
"""
acl = [ x for x in acl.splitlines()]
myip = ['18.1.1.2', '20.1.1.2', '5.2.3.4', '15.2.3.4', '9.2.3.4', '8.1.1.2 ', '11.2.3.4']
acl_match = []
for ip in myip:
for string in acl:
if string.find(" " + ip + " ")!=-1:
acl_match.append(string)
#print(string)
print(acl_match)
access-list access_myside_in line 7 extended permit tcp host 18.1.1.2 host 12.2.3.4 eq ssh
access-list access_myside_in line 49 extended permit tcp host 20.1.1.2 host 80.2.3.4 eq ssh
access-list access_myside_in line 30 extended permit tcp host 8.1.1.2 host 5.2.3.4 eq ssh
access-list access_myside_in line 1 extended permit tcp host 18.1.1.12 host 15.2.3.4 eq ssh
access-list access_myside_in line 8 extended permit tcp host 12.1.1.2 host 9.2.3.4 eq ssh
access-list access_myside_in line 10 extended permit tcp host 5.1.1.2 host 11.2.3.4 eq ssh
您可以使用正则表达式来确保 IP 地址仅在字符串之前或之后没有任何其他点或数字的情况下匹配。
import re
myip = ['18.1.1.2', '20.1.1.2', '5.2.3.4', '15.2.3.4', '9.2.3.4', '8.1.1.2', '11.2.3.4']
acl = """
access-list access_myside_in line 1 extended permit tcp host 18.1.1.12 host 15.2.3.4 eq ssh
access-list access_myside_in line 2 extended permit tcp host 18.1.2.2 host 15.1.3.4 eq ssh
access-list access_myside_in line 3 extended permit tcp host 16.1.1.2 host 5.2.23.4 eq ssh
access-list access_myside_in line 4 extended permit tcp host 18.2.1.2 host 15.2.1.4 eq ssh
access-list access_myside_in line 5 extended permit tcp host 10.1.1.2 host 15.2.3.14 eq ssh
access-list access_myside_in line 6 extended permit tcp host 13.1.1.2 host 10.2.3.4 eq ssh
access-list access_myside_in line 7 extended permit tcp host 18.1.1.2 host 12.2.3.4 eq ssh
access-list access_myside_in line 8 extended permit tcp host 12.1.1.2 host 9.2.3.4 eq ssh
access-list access_myside_in line 9 extended permit tcp host 15.1.1.2 host 15.22.3.4 eq ssh
access-list access_myside_in line 10 extended permit tcp host 5.1.1.2 host 11.2.3.4 eq ssh
access-list access_myside_in line 19 extended permit tcp host 1.1.1.2 host 15.2.13.4 eq ssh
access-list access_myside_in line 25 extended permit tcp host 11.1.1.2 host 15.12.3.4 eq ssh
access-list access_myside_in line 30 extended permit tcp host 8.1.1.2 host 5.2.3.4 eq ssh
access-list access_myside_in line 31 extended permit tcp host 111.1.1.2 host 15.2.3.40 eq ssh
access-list access_myside_in line 33 extended permit tcp host 18.1.11.2 host 17.2.3.4 eq ssh
access-list access_myside_in line 40 extended permit tcp host 19.1.1.2 host 55.2.3.4 eq ssh
access-list access_myside_in line 49 extended permit tcp host 20.1.1.2 host 80.2.3.4 eq ssh
"""
# add negated class and escape dots, combine list into alternating regex pattern
pattern = re.compile('|'.join('[^\d.]{}[^\d.]'.format(ip.replace('.', '\.')) for ip in myip))
result = [s for s in acl.splitlines() if re.search(pattern, s)]
print(result)
# ['access-list access_myside_in line 1 extended permit tcp host 18.1.1.12 host 15.2.3.4 eq ssh', 'access-list access_myside_in line 7 extended permit tcp host 18.1.1.2 host 12.2.3.4 eq ssh', 'access-list access_myside_in line 8 extended permit tcp host 12.1.1.2 host 9.2.3.4 eq ssh', 'access-list access_myside_in line 10 extended permit tcp host 5.1.1.2 host 11.2.3.4 eq ssh', 'access-list access_myside_in line 30 extended permit tcp host 8.1.1.2 host 5.2.3.4 eq ssh', 'access-list access_myside_in line 49 extended permit tcp host 20.1.1.2 host 80.2.3.4 eq ssh']
我正在尝试将列表与字符串文本进行比较,并打印与列表中的元素匹配的行
我试过下面的代码,但得到的 IP 地址不在列表中的行
acl = """
access-list access_myside_in line 1 extended permit tcp host 18.1.1.12 host 15.2.3.4 eq ssh
access-list access_myside_in line 2 extended permit tcp host 18.1.2.2 host 15.1.3.4 eq ssh
access-list access_myside_in line 3 extended permit tcp host 16.1.1.2 host 5.2.23.4 eq ssh
access-list access_myside_in line 4 extended permit tcp host 18.2.1.2 host 15.2.1.4 eq ssh
access-list access_myside_in line 5 extended permit tcp host 10.1.1.2 host 15.2.3.14 eq ssh
access-list access_myside_in line 6 extended permit tcp host 13.1.1.2 host 10.2.3.4 eq ssh
access-list access_myside_in line 7 extended permit tcp host 18.1.1.2 host 12.2.3.4 eq ssh
access-list access_myside_in line 8 extended permit tcp host 12.1.1.2 host 9.2.3.4 eq ssh
access-list access_myside_in line 9 extended permit tcp host 15.1.1.2 host 15.22.3.4 eq ssh
access-list access_myside_in line 10 extended permit tcp host 5.1.1.2 host 11.2.3.4 eq ssh
access-list access_myside_in line 19 extended permit tcp host 1.1.1.2 host 15.2.13.4 eq ssh
access-list access_myside_in line 25 extended permit tcp host 11.1.1.2 host 15.12.3.4 eq ssh
access-list access_myside_in line 30 extended permit tcp host 8.1.1.2 host 5.2.3.4 eq ssh
access-list access_myside_in line 31 extended permit tcp host 111.1.1.2 host 15.2.3.40 eq ssh
access-list access_myside_in line 33 extended permit tcp host 18.1.11.2 host 17.2.3.4 eq ssh
access-list access_myside_in line 40 extended permit tcp host 19.1.1.2 host 55.2.3.4 eq ssh
access-list access_myside_in line 49 extended permit tcp host 20.1.1.2 host 80.2.3.4 eq ssh
"""
myip = ['18.1.1.2', '20.1.1.2', '5.2.3.4', '15.2.3.4', '9.2.3.4', '8.1.1.2 ', '11.2.3.4']
acl_match = []
for a in myip:
for b in acl.splitlines():
if a in b:
acl_match.append(b)
print(acl_match)
['access-list access_myside_in line 7 extended permit tcp host 18.1.1.2 host 12.2.3.4 eq ssh',
'access-list access_myside_in line 49 extended permit tcp host 20.1.1.2 host 80.2.3.4 eq ssh',
'access-list access_myside_in line 1 extended permit tcp host 18.1.1.12 host 15.2.3.4 eq ssh',
'access-list access_myside_in line 30 extended permit tcp host 8.1.1.2 host 5.2.3.4 eq ssh',
'access-list access_myside_in line 31 extended permit tcp host 111.1.1.2 host 15.2.3.40 eq ssh',
'access-list access_myside_in line 40 extended permit tcp host 19.1.1.2 host 55.2.3.4 eq ssh',
'access-list access_myside_in line 1 extended permit tcp host 18.1.1.12 host 15.2.3.4 eq ssh',
'access-list access_myside_in line 31 extended permit tcp host 111.1.1.2 host 15.2.3.40 eq ssh',
'access-list access_myside_in line 8 extended permit tcp host 12.1.1.2 host 9.2.3.4 eq ssh',
'access-list access_myside_in line 7 extended permit tcp host 18.1.1.2 host 12.2.3.4 eq ssh',
'access-list access_myside_in line 30 extended permit tcp host 8.1.1.2 host 5.2.3.4 eq ssh',
'access-list access_myside_in line 10 extended permit tcp host 5.1.1.2 host 11.2.3.4 eq ssh']
如果格式一致,您可以在每一行中搜索每个 ip(前后有一个空格),或者您可以使用正则表达式。
acl = r"""
access-list access_myside_in line 1 extended permit tcp host 18.1.1.12 host 15.2.3.4 eq ssh
access-list access_myside_in line 2 extended permit tcp host 18.1.2.2 host 15.1.3.4 eq ssh
access-list access_myside_in line 3 extended permit tcp host 16.1.1.2 host 5.2.23.4 eq ssh
access-list access_myside_in line 4 extended permit tcp host 18.2.1.2 host 15.2.1.4 eq ssh
access-list access_myside_in line 5 extended permit tcp host 10.1.1.2 host 15.2.3.14 eq ssh
access-list access_myside_in line 6 extended permit tcp host 13.1.1.2 host 10.2.3.4 eq ssh
access-list access_myside_in line 7 extended permit tcp host 18.1.1.2 host 12.2.3.4 eq ssh
access-list access_myside_in line 8 extended permit tcp host 12.1.1.2 host 9.2.3.4 eq ssh
access-list access_myside_in line 9 extended permit tcp host 15.1.1.2 host 15.22.3.4 eq ssh
access-list access_myside_in line 10 extended permit tcp host 5.1.1.2 host 11.2.3.4 eq ssh
access-list access_myside_in line 19 extended permit tcp host 1.1.1.2 host 15.2.13.4 eq ssh
access-list access_myside_in line 25 extended permit tcp host 11.1.1.2 host 15.12.3.4 eq ssh
access-list access_myside_in line 30 extended permit tcp host 8.1.1.2 host 5.2.3.4 eq ssh
access-list access_myside_in line 31 extended permit tcp host 111.1.1.2 host 15.2.3.40 eq ssh
access-list access_myside_in line 33 extended permit tcp host 18.1.11.2 host 17.2.3.4 eq ssh
access-list access_myside_in line 40 extended permit tcp host 19.1.1.2 host 55.2.3.4 eq ssh
access-list access_myside_in line 49 extended permit tcp host 20.1.1.2 host 80.2.3.4 eq ssh
"""
acl = [ x for x in acl.splitlines()]
myip = ['18.1.1.2', '20.1.1.2', '5.2.3.4', '15.2.3.4', '9.2.3.4', '8.1.1.2 ', '11.2.3.4']
acl_match = []
for ip in myip:
for string in acl:
if string.find(" " + ip + " ")!=-1:
acl_match.append(string)
#print(string)
print(acl_match)
access-list access_myside_in line 7 extended permit tcp host 18.1.1.2 host 12.2.3.4 eq ssh
access-list access_myside_in line 49 extended permit tcp host 20.1.1.2 host 80.2.3.4 eq ssh
access-list access_myside_in line 30 extended permit tcp host 8.1.1.2 host 5.2.3.4 eq ssh
access-list access_myside_in line 1 extended permit tcp host 18.1.1.12 host 15.2.3.4 eq ssh
access-list access_myside_in line 8 extended permit tcp host 12.1.1.2 host 9.2.3.4 eq ssh
access-list access_myside_in line 10 extended permit tcp host 5.1.1.2 host 11.2.3.4 eq ssh
您可以使用正则表达式来确保 IP 地址仅在字符串之前或之后没有任何其他点或数字的情况下匹配。
import re
myip = ['18.1.1.2', '20.1.1.2', '5.2.3.4', '15.2.3.4', '9.2.3.4', '8.1.1.2', '11.2.3.4']
acl = """
access-list access_myside_in line 1 extended permit tcp host 18.1.1.12 host 15.2.3.4 eq ssh
access-list access_myside_in line 2 extended permit tcp host 18.1.2.2 host 15.1.3.4 eq ssh
access-list access_myside_in line 3 extended permit tcp host 16.1.1.2 host 5.2.23.4 eq ssh
access-list access_myside_in line 4 extended permit tcp host 18.2.1.2 host 15.2.1.4 eq ssh
access-list access_myside_in line 5 extended permit tcp host 10.1.1.2 host 15.2.3.14 eq ssh
access-list access_myside_in line 6 extended permit tcp host 13.1.1.2 host 10.2.3.4 eq ssh
access-list access_myside_in line 7 extended permit tcp host 18.1.1.2 host 12.2.3.4 eq ssh
access-list access_myside_in line 8 extended permit tcp host 12.1.1.2 host 9.2.3.4 eq ssh
access-list access_myside_in line 9 extended permit tcp host 15.1.1.2 host 15.22.3.4 eq ssh
access-list access_myside_in line 10 extended permit tcp host 5.1.1.2 host 11.2.3.4 eq ssh
access-list access_myside_in line 19 extended permit tcp host 1.1.1.2 host 15.2.13.4 eq ssh
access-list access_myside_in line 25 extended permit tcp host 11.1.1.2 host 15.12.3.4 eq ssh
access-list access_myside_in line 30 extended permit tcp host 8.1.1.2 host 5.2.3.4 eq ssh
access-list access_myside_in line 31 extended permit tcp host 111.1.1.2 host 15.2.3.40 eq ssh
access-list access_myside_in line 33 extended permit tcp host 18.1.11.2 host 17.2.3.4 eq ssh
access-list access_myside_in line 40 extended permit tcp host 19.1.1.2 host 55.2.3.4 eq ssh
access-list access_myside_in line 49 extended permit tcp host 20.1.1.2 host 80.2.3.4 eq ssh
"""
# add negated class and escape dots, combine list into alternating regex pattern
pattern = re.compile('|'.join('[^\d.]{}[^\d.]'.format(ip.replace('.', '\.')) for ip in myip))
result = [s for s in acl.splitlines() if re.search(pattern, s)]
print(result)
# ['access-list access_myside_in line 1 extended permit tcp host 18.1.1.12 host 15.2.3.4 eq ssh', 'access-list access_myside_in line 7 extended permit tcp host 18.1.1.2 host 12.2.3.4 eq ssh', 'access-list access_myside_in line 8 extended permit tcp host 12.1.1.2 host 9.2.3.4 eq ssh', 'access-list access_myside_in line 10 extended permit tcp host 5.1.1.2 host 11.2.3.4 eq ssh', 'access-list access_myside_in line 30 extended permit tcp host 8.1.1.2 host 5.2.3.4 eq ssh', 'access-list access_myside_in line 49 extended permit tcp host 20.1.1.2 host 80.2.3.4 eq ssh']