匹配keyworks的python过滤行

标签 python regex linux scripting

我有工作 python 脚本生成以下输出。

import re
import sys
import socket
conn = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
conn.connect(('10.10.10.10', 25001))
conn.send('status\n')
data = conn.recv(16777216)
conn.close()
print data

脚本输出

session 3594154272 xwf9VgJQfRSSPBCyXYVRzlw==foo xh_iUVQ6JRieFv70JjDVOnQ==bar 13584
stream 102.22.133.12:33562 173.24.54.19:39814 10.10.10.10:12838 39382628/29008576/68391204 
session 3363219694 xiXdeg8oGTQ6MYZ-Z5q4iKw==foo xVBsa0nlZT4-vOLA8P-WxSw==bar 2319
stream 71.22.223.192:43718 115.125.65.61:41126 10.10.10.10:12802 4243204/9624660/13867864
....
....
.... 

现在我想要在输出中以 stream 开头的任何行,所以我使用以下逻辑但它不起作用。

import re
import sys
import socket
conn = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
conn.connect(('10.10.10.10', 25001))
conn.send('status\n')
data = conn.recv(16777216)
conn.close()

# parse line contain stream
for line in data:
    if re.match(r'stream', line):
        print line,

最佳答案

您的数据 是一个巨大的字符串,而不是您预期的字符串列表。使用起来也更容易 str.startswith而不是正则表达式(减少资源消耗)。只需按如下方式更改您的代码:

# parse line contain stream
for n, line in enumerate(data.split('\n')):
    if line.startswith('stream '):
        print line

n 是您的数据 中的 行数。如果你只想计算遇到“stream”的具体次数:

count = 0
for line in data.split('\n'):
    if line.startswith('stream '):
        print line
        count += 1

关于匹配keyworks的python过滤行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54773285/

相关文章:

python - Python中列表理解中的闭包

python - numpy 2d bool 数组索引沿一个轴减少

java - 如何检查该行与正则表达式(regex)不矛盾?

Linux 上的 C free() 报告无效的下一个大小错误、数组指针、Mac 上的相同代码传递

linux - 为内核模块导出每个 cpu 符号

python - 将 Pandas 数据框单元格中的设置值拆分为多行

python - Pandas HDFStore 从嵌套列中选择

regex - 有没有办法在正则表达式中使用 not (^) 来处理多个字符?

c# - 为什么这个正则表达式匹配?

linux - Linux 上休眠后的文件系统 inode