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

如何用Shell工具(grep/sed/awk)从指定URL提取多段信息?

提取URL中的IP端口、用户名和密码的Shell命令

方法1:使用sed(推荐,简洁高效)

直接通过正则捕获目标字段,一次性输出结果:

echo "bbc:osdb://293.23.234.55:1234/bbc-dt-af/user=john&pass=pass123abc%sec=true" | sed -E 's/^.*:\/\/([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+:[0-9]+)\/.*user=([^&]+)&pass=([^%]+).*$/\1:\2:\3/'

说明:

  • -E 启用扩展正则,减少转义符使用
  • ^.*:\/\/ 匹配URL开头到://的所有内容
  • ([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+:[0-9]+) 捕获IP+端口的组合(第一组)
  • \/.*user= 匹配到user=前的路径内容
  • ([^&]+) 捕获用户名(直到&结束,第二组)
  • &pass=([^%]+) 捕获密码(直到%结束,第三组)
  • 最终用\1:\2:\3将三个捕获组用冒号连接输出

方法2:使用awk(灵活适配格式小变化)

通过分割字段的方式提取各部分:

echo "bbc:osdb://293.23.234.55:1234/bbc-dt-af/user=john&pass=pass123abc%sec=true" | awk -F'://' '{
    split($2, part1, "/")
    ip_port = part1[1]
    split(part1[3], params, "&")
    split(params[1], user_arr, "=")
    split(params[2], pass_arr, "%")
    print ip_port ":" user_arr[2] ":" pass_arr[2]
}'

说明:

  • 先用://分割URL,分离出包含IP端口的后半段
  • 再用/分割后半段,提取IP端口和参数部分
  • 用&分割参数,分别拆分用户名、密码字段
  • 最后拼接成目标格式输出

方法3:grep+sed+tr组合(直观易理解)

分步提取再拼接结果:

echo "bbc:osdb://293.23.234.55:1234/bbc-dt-af/user=john&pass=pass123abc%sec=true" | 
grep -Eo '([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+:[0-9]+)|user=[^&]+|pass=[^%]+' | 
sed -E 's/user=//; s/pass=//' | 
tr '\n' ':' | 
sed 's/:$//'

说明:

  1. grep -Eo 提取出IP端口、user=xxx、pass=yyy三行内容
  2. sed 移除user=和pass=前缀
  3. tr '\n' ':' 将换行符替换为冒号
  4. 最后一个sed去掉末尾多余的冒号

内容的提问来源于stack exchange,提问作者Kevin Rave

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 08:52:32