You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Bash脚本中提取traceroute输出括号内的字符串?

提取traceroute输出中括号内的IP地址

没问题,我来帮你搞定这个需求!要从traceroute的输出里提取括号内的内容(通常是IP地址),在Bash里有几种简单高效的方法,下面给你逐一讲解:

方法1:使用grep(推荐,简洁直观)

利用grep的Perl兼容正则表达式(PCRE)模式,可以精准提取括号内的内容:

traceroute your_target | grep -oP '\(\K[^)]+'

参数解释:

  • -o:只输出匹配到的部分,而不是整行
  • -P:启用PCRE正则支持
  • \(\K:匹配左括号(,然后\K会忽略之前的匹配内容,只保留后面的部分
  • [^)]+:匹配任意非右括号的字符,直到遇到右括号为止,也就是括号内的全部内容

方法2:使用sed

sed通过替换命令捕获括号内的内容并输出:

traceroute your_target | sed -n 's/.*(\([^)]*\)).*/\1/p'

参数解释:

  • -n:关闭默认的行输出,只打印我们指定的内容
  • s/.*(\([^)]*\)).*/\1/p:
    • .*(\([^)]*\)):匹配整行内容,其中\([^)]*\)捕获括号内的所有字符
    • \1:引用捕获到的内容,替换整行
    • p:打印替换后的结果

方法3:使用awk

通过指定分隔符快速提取字段:

traceroute your_target | awk -F'[()]' '$2 != "" {print $2}'

参数解释:

  • -F'[()]':将左括号(和右括号)设为字段分隔符
  • $2:分割后第二个字段就是括号内的内容
  • $2 != "":过滤掉没有括号的行(避免输出空行)

在Bash循环中使用的示例

如果是在脚本的最后一个循环里处理,比如遍历多个目标或者逐行处理traceroute输出,这里给你一个完整的脚本示例:

#!/bin/bash

# 示例:遍历多个目标地址
targets=("example.com" "google.com")

for target in "${targets[@]}"; do
    echo "=== 正在追踪 $target ==="
    # 提取每一行的括号内IP并输出
    traceroute "$target" | grep -oP '\(\K[^)]+' | while read -r ip; do
        echo "  跳点IP: $ip"
    done
done

这个脚本会逐个追踪目标,然后只输出每个跳点括号内的IP地址,完全符合你的需求。

内容的提问来源于stack exchange,提问作者SIddharth M.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 09:00:54