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

如何用Bash等工具从Firefox的recovery.js获取活动标签页URL

从Firefox的recovery.js单行文件中提取指定URL

需求:Firefox的recovery.js为单行文件,包含唯一字符串"_closedTabs",需提取该字符串之前第一个出现的URL(即从_closedTabs往前数的第一个{"url":"address"}结构中的地址)。
示例字符串:
"the-beginning",[{"url":"other-address"}],[{"url":"the-address"}],"the-middle","_closedTabs","the-end"
预期输出:the-address;未找到匹配内容则输出No url found。
已尝试jq但无法高效处理50MB大文件,希望用awk、grep、sed或纯Bash实现。

方法1:awk实现

通过截取目标字符串前的内容,再匹配末尾的最后一个URL结构来提取地址:

awk -F'"_closedTabs"' '{
    if (NF < 2) { print "No url found"; exit }
    part = $1
    match(part, /{"url":"[^"]*"[^}]*}$/, arr)
    if (arr[0] != "") {
        sub(/{.*"url":"([^"]*)".*/, "\\1", arr[0])
        print arr[0]
    } else {
        print "No url found"
    }
}' recovery.js

逻辑说明

  1. 以"_closedTabs"为分隔符,提取目标字符串之前的所有内容
  2. 匹配该内容末尾的最后一个{"url":"..."}结构
  3. 提取结构中的URL地址,无匹配则输出提示

方法2:sed实现

通过逐步删除无关内容,保留最后一个URL结构并提取地址:

sed -n '
    s/.*"\_closedTabs".*//;
    :loop
    s/.*{"url":"[^"]*"[^}]*}\(.*\)/\1/;
    t loop;
    s/.*{"url":"\([^"]*\)".*/\1/;
    T notfound;
    p;
    q;
    :notfound
    s/.*/No url found/;
    p
' recovery.js

逻辑说明

  1. 先删除_closedTabs及之后的所有内容
  2. 循环删除开头的所有{"url":"..."}结构,直到剩下最后一个
  3. 提取该结构中的URL地址,无匹配则跳转到提示输出

方法3:纯Bash实现

利用Bash原生字符串处理功能反向查找目标结构:

#!/bin/bash

content=$(<recovery.js)
# 截取"_closedTabs"之前的内容
before=${content%"_closedTabs"*}

if [[ -z "$before" ]]; then
    echo "No url found"
    exit 0
fi

# 循环定位最后一个{"url":"的位置
pattern='{"url":"'
pos=$(expr index "$before" "$pattern")
while [[ $pos -gt 0 ]]; do
    temp=${before:$pos}
    next_pos=$(expr index "$temp" "$pattern")
    if [[ $next_pos -eq 0 ]]; then
        break
    fi
    before=$temp
    pos=$next_pos
done

if [[ $pos -eq 0 ]]; then
    echo "No url found"
    exit 0
fi

# 提取URL内容
url_part=${before#*"$pattern"}
url=${url_part%%\"*}

echo "$url"

逻辑说明

  1. 读取文件内容并截取_closedTabs之前的部分
  2. 循环查找最后一个{"url":"的位置
  3. 提取该位置到下一个双引号之间的内容作为URL

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 19:03:36