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

Bash提取track条目并实现终端交互式预处理的方案咨询

纯终端交互式track条目处理方案

直接用bash脚本实现纯终端交互,兼顾提取效率和操作友好性,无需额外依赖:

核心实现脚本

#!/bin/bash

# 1. 提取trackxxx="xxx"中的目标字符串,存入数组
mapfile -t tracks < <(grep -o 'track[^"]*="[^"]*"' source_file.txt | awk -F'"' '{print $2}')

# 2. 初始化状态数组,默认全为未选中([ ])
declare -a statuses
for ((i=0; i<${#tracks[@]}; i++)); do
    statuses[i]="[ ]"
done

# 3. 交互式处理循环
while true; do
    # 清屏后显示表格
    clear
    echo "====================================="
    echo " 编号 | 标题       | 状态"
    echo "-------------------------------------"
    for ((i=0; i<${#tracks[@]}; i++)); do
        printf " %3d | %-12s | %s\n" $((i+1)) "${tracks[i]}" "${statuses[i]}"
    done
    echo "====================================="
    echo "输入编号修改状态,或输入q退出"
    read -p "请输入操作:" input

    # 处理退出命令
    if [[ "$input" == "q" ]]; then
        break
    fi

    # 处理状态修改
    if [[ "$input" =~ ^[0-9]+$ ]]; then
        idx=$((input-1))
        if ((idx >=0 && idx < ${#tracks[@]})); then
            if [[ "${statuses[idx]}" == "[ ]" ]]; then
                statuses[idx]="[*]"
            else
                statuses[idx]="[ ]"
            fi
        else
            echo "无效编号,请重新输入"
            sleep 2
        fi
    else
        echo "无效输入,请输入数字或q"
        sleep 2
    fi
done

# 退出前输出最终状态
echo "最终预处理结果:"
echo "-------------------------------------"
for ((i=0; i<${#tracks[@]}; i++)); do
    printf "%s %s\n" "${statuses[i]}" "${tracks[i]}"
done

关键细节说明

  • 提取逻辑:用grep -o精准匹配trackxxx="xxx"格式片段,再通过awk按引号分割提取目标字符串,比单纯sed更不易误匹配无关内容。
  • 交互体验:每次操作后清屏刷新表格,用固定宽度格式化保证排版整齐,状态用[*]/[ ]直观区分选中/未选中。
  • 输入校验:对用户输入做数字有效性和范围检查,避免数组越界,错误输入后给出提示并短暂停留。

使用方法

  1. 将脚本保存为track_processor.sh
  2. 赋予执行权限:chmod +x track_processor.sh
  3. 运行脚本:./track_processor.sh

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 13:12:14