当匹配条件在lin中发生两次时,grep指定一个值

2024-09-27 21:27:54 发布

您现在位置:Python中文网/ 问答频道 /正文

下一行有两个长度。我想提取值46,再加上16。你知道吗

1466352405.455975 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto UDP (17), length 46) 192.168.52.53.32769 > 192.168.52.54.9600: UDP, length 18

我试过grep'\slength' | cut -d: -f1,但是没有给出正确的结果。我希望得到46,再加上16。所以最终值应该是64。你知道吗

谢谢


Tags: ipiddflengthgrepoffsetf1proto
3条回答

Python中使用以下代码段:

import re

regex = r'length (\d+)'
# search for length, a space and digits (capture these)
string = "1466352405.455975 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto UDP (17), length 46) 192.168.52.53.32769 > 192.168.52.54.9600: UDP, length 18"

numbers = re.findall(regex, string)
print numbers
# ['46', '18']

参见a demo on ideone.com
为了sum()更进一步,您可以将代码调整为:

# taken from http://interactivepython.org/runestone/static/pythonds/Recursion/pythondsCalculatingtheSumofaListofNumbers.html
def listsum(numList):
    theSum = 0
    for i in numList:
        theSum = theSum + int(i)
    return theSum

print listsum(numbers)
# 64

我想你的意思是“再加上18个”;)

不管怎样,既然你用“python”来标记你的问题

import re
s = "1466352405.455975 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto UDP (17), length 46) 192.168.52.53.32769 > 192.168.52.54.9600: UDP, length 18"
re.findall("length (\d+)",s)
$ awk '{print $17+16}' file
62

如果这不是您想要的,那么编辑您的问题,以澄清您的需求,并提供更具代表性的样本输入和预期输出。你知道吗

相关问题 更多 >

    热门问题