从文件shell脚本中获取子字符串

时间:2013-01-14 21:31:24

标签: linux shell grep

  

可能重复:
  i need get a substring from a file shell script

我需要一些关于这个shell脚本的帮助。我有一个变量,代表一个IP / TCP头。我需要通过选中的标题过滤流量捕获。

> var=ttl 128 (only TTL=128)
> 
> tcpdump -Xvv -n -i eth0 -c 300 > capture.txt 2>/dev/null
> 

我正在尝试使用grep命令,但只有ttl 128的行,不要ip源和目的地

> 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       ..............
15:29:18.164566 IP (tos 0x0, ttl 64, id 2394, offset 0, flags [none], proto UDP (17), length 125)
    10.0.0.147.58363 > 239.255.255.255.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       ..............

我需要从包含ttl 128标头的数据包中获取ip地址源和ip地址目的地,在示例中输出结果必须是

10.0.0.131.58363> 239.255.255.250.1900

1 个答案:

答案 0 :(得分:0)

如果您的grep支持显示上下文-A,则可以尝试

grep -A 1 -e 'ttl 128' capture.txt | grep '^    ' | cut -d: -f1

第一个grep显示所有行ttl 128加上一行。第二个grep过滤以空白开头的行。最终cut会在第一个:之前选择所有内容。