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

解析error-icon类div元素时Grep报未识别选项错误求助

解决Shell脚本grep解析HTML时的"unrecognized option '-->'"错误

嘿,我一眼就瞅出你脚本里的问题啦——你把curl返回的HTML响应直接当作文件名传给grep了,这才触发了那个"unrecognized option '-->'"的错误!grep以为你要读取某个叫那堆HTML内容的文件,结果把内容里的-->当成了命令选项,自然就懵了。

问题根源

看你原来的这行代码:

output=$(grep -o '<div class="error-icon">[^<]*' "$response" | grep -o '[^>]*$')

这里的"$response"是curl返回的HTML文本,但grep的语法里,后面的参数如果是字符串,会被当作文件名来读取,而不是作为要处理的内容。当HTML里出现--开头的内容(比如注释里的-->),grep就会把它当成未识别的命令选项,直接报错。

另外还有个隐藏小问题:你用单引号包裹了--data-raw的内容,这会导致${verifyCard}变量无法被解析,脚本实际上是把字符串${verifyCard}传给了接口,而不是你传入的参数值。

修复方案

我们需要把curl的响应内容通过标准输入传给grep,同时修正参数传递的问题,有两种简单的方式:

方式1:用管道(echo + |)

把原来的output行改成:

output=$(echo "$response" | grep -o '<div class="error-icon">[^<]*' | grep -o '[^>]*$')

通过echo "$response"把内容输出到标准输出,再用管道|传给grep处理,这样grep就会读取标准输入里的HTML内容,而不是去查找不存在的文件。

方式2:用Here-string(<<<)

这是Bash/zsh里更简洁的写法,直接把变量内容传给grep的标准输入:

output=$(grep -o '<div class="error-icon">[^<]*' <<< "$response" | grep -o '[^>]*$')

更可靠的HTML解析建议

其实用grep处理HTML是非常脆弱的——如果页面的HTML结构稍微变化(比如class名前后加空格、标签换行),grep的正则就会失效。如果你的环境允许,推荐用专门的HTML解析工具,比如pup(一个基于Go的命令行HTML解析器):

# 先安装pup(比如Ubuntu下:sudo apt install pup)
output=$(echo "$response" | pup '.error-icon text{}')

这样不管HTML怎么排版,都能精准提取到class为error-icon的元素里的文本内容,比grep靠谱多了!

完整修复后的脚本

#!/bin/sh
verifyCard=$1
if [ -z "${verifyCard}" ]; then
    echo "No argument supplied"
    exit 1
fi
response=$(curl 'https://www.isic.org/verify/' \
-H 'User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:80.0) Gecko/20100101 Firefox/80.0' \
-H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8' \
-H 'Accept-Language: en-US,en;q=0.5' --compressed \
-H 'Content-Type: application/x-www-form-urlencoded' \
-H 'Origin: https://www.isic.org' \
-H 'Connection: keep-alive' \
-H 'Referer: https://www.isic.org/verify/' \
-H 'Cookie: PHPSESSID=46plnh6b31e2pusv1do6thfbm7; AWSELB=AF73034F18B38D7DCED6DEDC728D31BA3F3A73F96747FEE7FA7C4F7A74BC9954E5928CBDDD5C053FFB2A37CE37136C4BA008B15163192B34CFA04D35BEC4ED0D0D2913A2FB; AWSELBCORS=AF73034F18B38D7DCED6DEDC728D31BA3F3A73F96747FEE7FA7C4F7A74BC9954E5928CBDDD5C053FFB2A37CE37136C4BA008B15163192B34CFA04D35BEC4ED0D0D2913A2FB; _ga=GA1.2.650910486.1600495658; _gid=GA1.2.731428038.1600495658; _gat=1' \
-H 'Upgrade-Insecure-Requests: 1' \
--data-raw "verify_card_number=${verifyCard}")
# 这里用echo管道传递内容给grep
output=$(echo "$response" | grep -o '<div class="error-icon">[^<]*' | grep -o '[^>]*$')
echo "$output"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 12:17:58