如何过滤命令行输出?

时间:2019-07-08 14:09:21

标签: python python-3.x

我需要过滤在网络设备中执行的命令的输出,以便仅显示与“ 10.13.32.34”之类的文本匹配的行。 我创建了一个python代码,可带走命令的所有输出,但我只需要其中的一部分。

我正在Windows 10 Pro上运行Python 3.7.3。

我使用的代码如下,我需要过滤部分,因为我是一位网络工程师,没有python编程的基本概念。 (到现在为止...)

from steelscript.steelhead.core import steelhead
from steelscript.common.service import UserAuth
auth = UserAuth(username='admin', password='password')
sh = steelhead.SteelHead(host='em01r001', auth=auth)
from steelscript.cmdline.cli import CLIMode
sh.cli.exec_command("show connections optimized", mode=CLIMode.CONFIG)
output = (sh.cli.exec_command("show connections optimized"))

1 个答案:

答案 0 :(得分:1)

我不知道您的输出是什么样子,因此将问题中的文本用作示例数据。无论如何,对于一个简单的模式(例如问题中显示的内容),您可以这样做:

output = '''\
I need to filter the output of a command executed
in network equipment in order to bring only the
lines that match a text like '10.13.32.34'. I
created a python code that brings all the output
of the command but I need only part of this.

I am using Python 3.7.3 running on a Windows 10
Pro.

The code I used is below and I need the filtering
part because I am a network engineer without the
basic notion of python programming. (till now...)
'''

# Filter the lines of text in output.
filtered = ''.join(line for line in output.splitlines()
                            if '10.13.32.34' in line)

print(filtered)  # -> lines that match a text like '10.13.32.34'. I

通过使用Python的内置正则表达式re.search()模块中的re函数,您可以对更复杂的模式执行类似的操作。使用正则表达式更为复杂,但功能非常强大。有许多使用它们的教程,包括Python自己的文档中的一篇Regular Expression HOWTO