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

Bash环境下校验CSV中字符串是否为合法域名的问题咨询

问题修复与正确实现

原有代码错误点

  • 语法问题:条件判断的[[ ]]前后必须加空格,原代码中括号前后缺空格、混用[ ]和[[ ]]、末尾多写了],会直接触发语法报错
  • 逻辑问题:仅判断字符串包含.com等后缀,会把test.com.cn、fakecom.test这类不符合要求的内容误判为合法,且硬编码后缀的方式扩展性极差
  • 位置错误:echo "Finished!"放在循环体内,每读取一行都会输出一次,不符合预期

修复后代码(域名校验,适配域名抢注检测场景)

适用于校验每行是纯域名的场景,支持所有通用顶级域,校验逻辑符合ICANN规范:

# 若需要实时转换xlsx为csv,先安装csvkit后替换INPUT为<(in2csv 目标文件.xlsx) 即可直接读取xlsx内容,无需生成临时csv文件
INPUT=domain3.csv

# 跳过CSV表头(如果文件没有表头可删除下一行)
read -r header < "$INPUT"

while IFS= read -r line
do
  # 去除首尾空白字符
  line=$(echo "$line" | xargs)
  # 空行直接跳过
  [ -z "$line" ] && continue
  # 域名格式正则校验,支持各级子域名、所有合法顶级域
  if [[ "$line" =~ ^([a-zA-Z0-9]([a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?\.)+[a-zA-Z]{2,}$ ]]; then
    echo "$line"
  else
    echo "$line is not a valid domain"
  fi
done < "$INPUT"
echo "Finished!"

可选扩展:完整URL合法性校验

如果需要校验带http/https前缀的完整URL,替换上面代码中的if判断条件即可:

if [[ "$line" =~ ^https?://([a-zA-Z0-9]([a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?\.)+[a-zA-Z]{2,}(/.*)?$ ]]; then

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 12:57:03