从文件shell脚本获取一个子string

我需要这个shell脚本的一些帮助。 我有一个variables,代表一个IP / TCP头。 我需要通过select的头来过滤stream量捕获。

> var=ttl 128 > > tcpdump -Xvv -n -i eth0 -c 300 > capture.txt 2>/dev/null > > grep -i "$var" capture.txt > resultGrep.txt 

tcpdump命令的结果就是这样的

 15:29:18.164566 IP (tos 0x0, ttl 1, id 2394, offset 0, flags [none], proto UDP (17), length 125) 10.0.0.155.58363 > 239.255.255.254.1900: UDP, length 97 0x0000: 4600 0024 0000 0000 0102 3ad3 0a00 0000 F..$......:..... 0x0010: e000 0001 9404 0000 1101 ebfe 0000 0000 ................ 0x0020: 0300 0000 0000 0000 0000 0000 0000 .............. 15:29:18.164566 IP (tos 0x0, ttl 128, id 2394, offset 0, flags [none], proto UDP (17), length 125) 10.0.0.131.58363 > 239.255.255.250.1900: UDP, length 97 0x0000: 4600 0024 0000 0000 0102 3ad3 0a00 0000 F..$......:..... 0x0010: e000 0001 9404 0000 1101 ebfe 0000 0000 ................ 0x0020: 0300 0000 0000 0000 0000 0000 0000 .............. 

我需要有IP地址源和IP地址目的地,在这个例子中输出结果必须是

10.0.0.131.58363> 239.255.255.250.1900

Solutions Collecting From Web of "从文件shell脚本获取一个子string"

尝试直接在tcpdumpUnix pipe执行此操作:

 tcpdump -Xvv -n -i eth0 -c 300 | grep -oP "\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}.\d{1,5}\s+>\s+\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}.\d{1,5}" 

这是坚实的;)

以及我对这个问题的理解是,你想从你的resultGrep.txt ,而不是capture.txt提取的东西

然后:

 grep -oP '[\d\.]*\s*>\s*[\d\.]*' resultGrep.txt 

看测试:

 kent$ echo "15:29:18.164566 IP (tos 0x0, ttl 1, id 2394, offset 0, flags [none], proto UDP (17), length 125) dquote> 10.0.0.131.58363 > 239.255.255.250.1900: UDP, length 97 dquote> 0x0000: 4600 0024 0000 0000 0102 3ad3 0a00 0000 F..$......:..... dquote> 0x0010: e000 0001 9404 0000 1101 ebfe 0000 0000 ................ dquote> 0x0020: 0300 0000 0000 0000 0000 0000 0000 .............."|grep -oP '[\d\.]*\s*>\s*[\d\.]*' 10.0.0.131.58363 > 239.255.255.250.1900