grep与sed无法识别带度数格式GPS坐标字符串的问题求助
解决GPS坐标字符串匹配问题
你之前的命令失败主要有两个核心原因:
- 不必要转义了度数符号
°:正则表达式中°是普通字符,加反斜杠后\°会被识别为「反斜杠+度数符号」两个字符,和目标字符串中的单个°不匹配。 - 未正确转义点号
.:正则里.匹配任意字符,要匹配字面意义的.必须用\.转义(固定字符串模式除外)。
方案1:使用固定字符串模式(推荐)
用grep -F(或fgrep)将模式当作纯文本匹配,无需处理正则特殊字符,最简单直接:
# 双引号写法:转义内部双引号 grep -F "(37°35'11.2\" N 85°30'40.3\"W)" file.txt # 单引号写法:处理内部单引号 grep -F '(37°35'\''11.2" N 85°30'\''40.3"W)' file.txt
方案2:使用正则表达式模式
如果需要扩展匹配其他坐标格式,修正转义规则即可:
# 双引号写法:转义点号和内部双引号 grep "(37°35'11\.2\" N 85°30'40\.3\"W)" file.txt # 单引号写法:转义点号,处理内部单引号 grep '(37°35'\''11\.2" N 85°30'\''40\.3"W)' file.txt
方案3:使用sed命令
sed的匹配逻辑和grep类似,写法如下:
# 固定字符串模式 sed -n -F "/(37°35'11.2\" N 85°30'40.3\"W)/p" file.txt # 正则模式 sed -n "/(37°35'11\.2\" N 85°30'40\.3\"W)/p" file.txt
额外提示:编码问题处理
如果因编码差异导致度数符号无法匹配,可使用UTF-8十六进制编码\xC2\xB0替代°:
grep -F "(37\xC2\xB035'11.2\" N 85\xC2\xB030'40.3\"W)" file.txt
内容的提问来源于stack exchange,提问作者chans
相关产品推荐
相关产品推荐

