我需要在Shell脚本中获取子字符串

时间:2013-01-09 21:51:35

标签: linux string shell

我需要帮助。

我需要在下一行中获得一个子字符串

11:46:24.851239 IP (tos 0x0, ttl 128, id 11289, offset 0, flags [none], proto UDP (17), length 229)

结果必须是:ttl 128

我希望你能帮助我!

谢谢!

3 个答案:

答案 0 :(得分:4)

尝试这样做:

echo '11:46:24.851239 IP (tos 0x0, ttl 128, id 11289, offset 0, flags [none], proto UDP (17), length 229)' |
grep -oP "\bttl\s+\d+\b"
ttl 128

  • \b是一个单词边界
  • \s是一个空格
  • +表示至少一个或多个前一个字符
  • -P switch是grep
  • 的高级有用语法
  • -o切换表示仅打印匹配的部分

修改

如果你想把它放在一个变量中:

var=$(
    echo '11:46:24.851239 IP (tos 0x0, ttl 128, id 11289, offset 0, flags [none], proto UDP (17), length 229)' |
        grep -oP "\bttl\s+\d+\b"
)
echo "$var"

答案 1 :(得分:2)

尝试使用grep -o 'ttl [0-9]\+'

$ echo '11:46:24.851239 IP (tos 0x0, ttl 128, id 11289, offset 0, flags [none], proto UDP (17), length 229)' | grep -o 'ttl [0-9]\+'
ttl 128

答案 2 :(得分:0)

使用

sed 's/.*[ ]*\(ttl[ ]*[0-9]*\).*/\1/' input