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

如何使用Shell脚本获取管道命令输出的正则匹配结果

脚本闪退原因

你写的脚本混用了两种完全不兼容的语法:

  • 首行#!/bin/bash是Linux/macOS/WSL/Git Bash等类Unix环境的Shell声明
  • for /f、%%a是Windows原生批处理(.bat/.cmd)的专属语法,二者同时使用会直接报错退出。
    如果是Windows环境下直接双击运行的脚本,直接使用Windows批处理语法即可,不需要加#!/bin/bash头,脚本末尾加pause可以避免运行完直接闪退。

坐标提取实现方案

不需要依赖findstr做正则截取,直接通过字符串分割即可拿到四个坐标,两种常用环境的实现如下:

方案1:Windows原生批处理实现

无需安装额外工具,直接用系统自带功能即可完成:

@echo off
setlocal enabledelayedexpansion
:: 提取Extent行并分割坐标
for /f "tokens=2,3,5,6 delims=(),- " %%a in ('ogrinfo C:/test.kml -so -al ^| findstr "Extent"') do (
    :: 按要求格式拼接,对应minLon,maxLon,minLat,maxLat
    set res=%%a,%%c,%%b,%%d
    :: 输出到控制台
    echo !res!
    :: 写入output文件
    echo !res!>output
    :: 存入独立变量供后续使用
    set minLon=%%a
    set maxLon=%%c
    set minLat=%%b
    set maxLat=%%d
)
:: 测试打印变量
echo min经度: %minLon%
echo max经度: %maxLon%
echo min纬度: %minLat%
echo max纬度: %maxLat%
pause

方案2:Bash环境(Git Bash/WSL/类Unix环境)实现

如果使用的是类Unix Shell环境,用awk分割字符串即可快速提取:

#!/bin/bash
# 提取Extent行
extent_line=$(ogrinfo C:/test.kml -so -al | grep "Extent")
# 拆分获取四个坐标值
minLon=$(echo $extent_line | awk -F'[(), -]' '{print $3}')
minLat=$(echo $extent_line | awk -F'[(), -]' '{print $5}')
maxLon=$(echo $extent_line | awk -F'[(), -]' '{print $9}')
maxLat=$(echo $extent_line | awk -F'[(), -]' '{print $11}')
# 拼接为要求的格式
res="${minLon},${maxLon},${minLat},${maxLat}"
echo $res
echo $res > output
# 打印变量验证
echo "min经度: $minLon"
echo "max经度: $maxLon"
echo "min纬度: $minLat"
echo "max纬度: $maxLat"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 14:09:04