gpt4 book ai didi

regex - 如何使用 grep 查找损坏的 NMEA 日志句子?

转载 作者:行者123 更新时间:2023-12-01 00:09:11 26 4
gpt4 key购买 nike

我的 GPS 记录器偶尔会在日志文件的末尾留下“未完成”的行。我认为他们只是在最后,但我想检查所有行以防万一。

一个完整的句子示例如下:

$GPRMC,005727.000,A,3751.9418,S,14502.2569,E,0.00,339.17,210808,,,A*76

该行应该以 $ 开头签名,并以 * 结尾和两个字符的十六进制校验和。我不在乎校验和是否正确,只关心它是否存在。它还需要忽略没有校验和且位于每个文件开头的“ADVER”句子。

以下 Python 代码可能有效:
import re
from path import path
nmea = re.compile("^\$.+\*[0-9A-F]{2}$")
for log in path("gpslogs").files("*.log"):
for line in log.lines():
if not nmea.match(line) and not "ADVER" in line:
print "%s\n\t%s\n" % (log, line)

有没有办法用 grep 做到这一点?或 awk还是简单的东西?我还没有真正弄清楚如何获得 grep做我想做的事。

更新 :感谢@Motti 和@Paul,我能够得到以下几乎我想要的东西,但不得不使用单引号并删除尾随 $在它起作用之前:
grep -nvE '^\$.*\*[0-9A-F]{2}' *.log | grep -v ADVER | grep -v ADPMB

还有两个问题,我怎样才能让它忽略空行?我可以合并最后两个 grep ?

最佳答案

最少的测试表明应该这样做:

grep -Ev "^\$.*\*[0-9A-Fa-f]{2}$" a.txt | grep -v ADVER
  • -E 使用扩展正则表达式
  • -v 显示行 不是 匹配
  • ^ 以
  • 开头
  • .* 任何东西
  • \* 星号
  • [0-9A-Fa-f] 十六进制数字
  • {2} 正好是前两个
  • $行尾
  • | grep -v ADVER清除 ADVER 行

  • HTH,莫蒂。

    关于regex - 如何使用 grep 查找损坏的 NMEA 日志句子?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36742/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com