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

Shell如何提取外部文件两模式间内容并执行其中curl命令

Shell脚本提取并执行指定区间curl命令修复方案

原有脚本核心问题

  • 关键词拼写不匹配:case分支写的是loresipsum,和test.txt内的边界标记前缀loremipsum不一致,输入正确关键词也无法命中对应分支
  • sed区间逻辑缺陷:原有规则从起始标记一直读到文件末尾,会把边界标记行本身、后续其他块的无关内容都输出,没有过滤空行
  • 输入流冲突:sed通过管道给while传内容的同时,又给while加了< $testfile重定向,重定向优先级高于管道,导致while直接读取整个test.txt文件,完全忽略sed提取的内容
  • 逻辑错误:echo "makingcurlCall"写死固定字符串,既不打印当前执行的命令,也不输出执行结果;默认分支变量引用漏了$,永远打印字面量:instance,无法回显用户输入

修复后完整代码

#!/bin/bash
read -p "Enter a word: " instance
testfile="test.txt"

case $instance in 
    loremipsum|foobar) 
        # 提取两个边界标记之间的有效内容,排除标记行、空行
        sed -n "/^${instance}1/,/^${instance}2/{
            /^${instance}1/d
            /^${instance}2/d
            /^[[:space:]]*$/d
            p
        }" "$testfile" | while read -r line; do
            echo "当前执行命令: $line"
            makingcurlCall=$(eval "$line")
            echo "命令执行返回: $makingcurlCall"
            echo "----------------------------------------"
        done
        ;;
    *)
        printf 'No match for "%s"\n' "$instance" 
esac

代码逻辑说明

  • 合并了逻辑完全一致的两个关键词分支,减少冗余代码
  • sed规则精准匹配关键词1到关键词2的闭合区间,直接删除首尾边界标记行、无内容的空白行,仅输出有效curl命令
  • 移除了while循环多余的文件重定向,确保循环读取的是sed过滤后的有效命令行
  • 执行命令前打印当前命令内容,执行后输出返回结果,方便排查执行问题
  • 修正默认分支的变量引用,未匹配时正确回显用户输入的关键词

新增其他关键词匹配规则时,直接在case第一个分支的匹配列表追加对应关键词即可,无需重复编写处理逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.14 16:15:48