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更不易误匹配无关内容。 - 交互体验:每次操作后清屏刷新表格,用固定宽度格式化保证排版整齐,状态用
[*]/[ ]直观区分选中/未选中。 - 输入校验:对用户输入做数字有效性和范围检查,避免数组越界,错误输入后给出提示并短暂停留。
使用方法
- 将脚本保存为
track_processor.sh - 赋予执行权限:
chmod +x track_processor.sh - 运行脚本:
./track_processor.sh
内容的提问来源于stack exchange,提问作者Peter
相关产品推荐
相关产品推荐

