Python grep和cut

Python grep和cut,python,cisco,Python,Cisco,在Linux中,使用grep、cut或awk等工具很容易获得特定字符串 此显示版本示例取自 grep和cut wolf@linux:~$ grep 'Model Number' shver | cut -d : -f 2 C9300-48P C9300-48P wolf@linux:~$ 删除额外空间如果有更好的解决方案,请告诉我 wolf@linux:~$ grep 'Model Number' shver | cut -d : -f 2 | cut -d ' ' -f 2 C9300

在Linux中,使用grep、cut或awk等工具很容易获得特定字符串

此显示版本示例取自

grep和cut

wolf@linux:~$ grep 'Model Number' shver | cut -d : -f 2
 C9300-48P
 C9300-48P
wolf@linux:~$ 
删除额外空间如果有更好的解决方案,请告诉我

wolf@linux:~$ grep 'Model Number' shver | cut -d : -f 2 | cut -d ' ' -f 2
C9300-48P
C9300-48P
wolf@linux:~$ 
选择第一个输出

wolf@linux:~$ grep 'Model Number' shver | cut -d : -f 2 | cut -d ' ' -f 2 | head -1
C9300-48P
wolf@linux:~$ 
那是在Linux中。我计划用Python编写类似的代码

我的尝试目前还没有成功

定义shver字符串

>>> shver = '''cisco C9300-48P (X86) processor with 818597K/6147K bytes of memory.
... Processor board ID FCW2049G03S
... 2048K bytes of non-volatile configuration memory.
... 8388608K bytes of physical memory.
... 1638400K bytes of Crash Files at crashinfo:.
... 11264000K bytes of Flash at flash:.
... 0K bytes of WebUI ODM Files at webui:.
... Model Number                       : C9300-48P
... 
... Base Ethernet MAC Address          : 04:6c:9d:01:3b:80
... Motherboard Assembly Number        : 73-17956-04
... Motherboard Serial Number          : FOC20465ABU
... Model Revision Number              : P4B
... Motherboard Revision Number        : 04
... Model Number                       : C9300-48P
... System Serial Number               : FCW2049G03S
... '''
>>> 
核实一下

>>> shver
'cisco C9300-48P (X86) processor with 818597K/6147K bytes of memory.\nProcessor board ID FCW2049G03S\n2048K bytes of non-volatile configuration memory.\n8388608K bytes of physical memory.\n1638400K bytes of Crash Files at crashinfo:.\n11264000K bytes of Flash at flash:.\n0K bytes of WebUI ODM Files at webui:.\nModel Number                       : C9300-48P\n\nBase Ethernet MAC Address          : 04:6c:9d:01:3b:80\nMotherboard Assembly Number        : 73-17956-04\nMotherboard Serial Number          : FOC20465ABU\nModel Revision Number              : P4B\nMotherboard Revision Number        : 04\nModel Number                       : C9300-48P\nSystem Serial Number               : FCW2049G03S\n'
>>> 
创建一个列表

>>> shver_list = shver.splitlines()
>>> shver_list
['cisco C9300-48P (X86) processor with 818597K/6147K bytes of memory.', 'Processor board ID FCW2049G03S', '2048K bytes of non-volatile configuration memory.', '8388608K bytes of physical memory.', '1638400K bytes of Crash Files at crashinfo:.', '11264000K bytes of Flash at flash:.', '0K bytes of WebUI ODM Files at webui:.', 'Model Number                       : C9300-48P', '', 'Base Ethernet MAC Address          : 04:6c:9d:01:3b:80', 'Motherboard Assembly Number        : 73-17956-04', 'Motherboard Serial Number          : FOC20465ABU', 'Model Revision Number              : P4B', 'Motherboard Revision Number        : 04', 'Model Number                       : C9300-48P', 'System Serial Number               : FCW2049G03S']
>>> 
下一步是找出字符串“modelnumber”是否存在并打印出该行

>>> if 'Model Number' in shver_list:
...     'yes'
... else:
...     'no'
... 
'no'
>>> 
如何打印包含“型号”的行

>>> for i in shver_list:
...     if 'Model Number' in shver_list:
...             i
... 
>>> 
期望输出

C9300-48P

您可以将数据解析到字典中,这样就可以很容易地访问相关信息:

shver = '''cisco C9300-48P (X86) processor with 818597K/6147K bytes of memory.
Processor board ID FCW2049G03S
2048K bytes of non-volatile configuration memory.
8388608K bytes of physical memory.
1638400K bytes of Crash Files at crashinfo:.
11264000K bytes of Flash at flash:.
0K bytes of WebUI ODM Files at webui:.
Model Number                       : C9300-48P

Base Ethernet MAC Address          : 04:6c:9d:01:3b:80
Motherboard Assembly Number        : 73-17956-04
Motherboard Serial Number          : FOC20465ABU
Model Revision Number              : P4B
Motherboard Revision Number        : 04
Model Number                       : C9300-48P
System Serial Number               : FCW2049G03S
'''

attributes = {}

for line in shver.splitlines():
    if ':' in line:  # we just take lines that contain a colon
        item, value = line.strip().split(':', 1)  # Split at the first colon!
        attributes[item.strip()] = value.strip()  # remove all whitespaces

print(attributes['Model Number'])
print(attributes['System Serial Number'])
输出:

C9300-48P
FCW2049G03S

您可以将数据解析到字典中,这样就可以很容易地访问相关信息:

shver = '''cisco C9300-48P (X86) processor with 818597K/6147K bytes of memory.
Processor board ID FCW2049G03S
2048K bytes of non-volatile configuration memory.
8388608K bytes of physical memory.
1638400K bytes of Crash Files at crashinfo:.
11264000K bytes of Flash at flash:.
0K bytes of WebUI ODM Files at webui:.
Model Number                       : C9300-48P

Base Ethernet MAC Address          : 04:6c:9d:01:3b:80
Motherboard Assembly Number        : 73-17956-04
Motherboard Serial Number          : FOC20465ABU
Model Revision Number              : P4B
Motherboard Revision Number        : 04
Model Number                       : C9300-48P
System Serial Number               : FCW2049G03S
'''

attributes = {}

for line in shver.splitlines():
    if ':' in line:  # we just take lines that contain a colon
        item, value = line.strip().split(':', 1)  # Split at the first colon!
        attributes[item.strip()] = value.strip()  # remove all whitespaces

print(attributes['Model Number'])
print(attributes['System Serial Number'])
输出:

C9300-48P
FCW2049G03S

您必须筛选列表中的条目。如果您直接过滤,则查找的行实际上是型号

modelnumbers = [line for line in shver_list if 'Model Number' in line]
print(modelnumbers)`
这将打印包含子字符串型号的所有行

modelnumbers = [line for line in shver_list if 'Model Number' in line]
print(modelnumbers)`
为了获得所需的输出,您使用第一个结果,并去掉所有不需要的东西

print(modelnumbers[0].split(":")[1].strip())

您必须筛选列表中的条目。如果您直接过滤,则查找的行实际上是型号

modelnumbers = [line for line in shver_list if 'Model Number' in line]
print(modelnumbers)`
这将打印包含子字符串型号的所有行

modelnumbers = [line for line in shver_list if 'Model Number' in line]
print(modelnumbers)`
为了获得所需的输出,您使用第一个结果,并去掉所有不需要的东西

print(modelnumbers[0].split(":")[1].strip())
在shver_列表步骤中,您可以执行以下操作:

for item in shver_list:
    if "Model Number" in item:
        break
因此,一旦找到匹配项,它将打破循环并查看项目中的内容:

现在我们可以将其拆分为:注意周围的空格并获得:

>>> items.split(" : ")
['Model Number                      ', 'C9300-48P']
因此,所需的元素位于该列表的第一个位置

总而言之:

for item in shver_list:
    if "Model Number" in item:
        break
desired = item.split(" : ")[1]
另一种方法是使用正则表达式。这次我们从shver字符串中获取:

我们使用FindItem进行延迟求值,因为我们希望第一次出现,所以我们在其上使用下一次,并获取匹配组以获得C9300-48P的所需结果。

从您的列表步骤中,您可以执行以下操作:

for item in shver_list:
    if "Model Number" in item:
        break
因此,一旦找到匹配项,它将打破循环并查看项目中的内容:

现在我们可以将其拆分为:注意周围的空格并获得:

>>> items.split(" : ")
['Model Number                      ', 'C9300-48P']
因此,所需的元素位于该列表的第一个位置

总而言之:

for item in shver_list:
    if "Model Number" in item:
        break
desired = item.split(" : ")[1]
另一种方法是使用正则表达式。这次我们从shver字符串中获取:

我们使用finditer进行延迟求值,因为我们希望第一次出现,所以我们在它上使用下一次,并获取匹配组以获得所需的C9300-48P结果