我的GPS记录器偶尔会在日志文件的末尾留下“未完成”的行。我想他们只是在最后,但我想检查所有线路以防万一。如何使用grep找到损坏的NMEA日志句子?
样本完整的句子是这样的:
$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和@保罗,我是能够得到以下几乎做了我想要的东西,但必须使用单引号和删除尾随$
之前,它的工作:
grep -nvE '^\$.*\*[0-9A-F]{2}' *.log | grep -v ADVER | grep -v ADPMB
还有两个问题出现,我怎样才能让它忽略空行?我可以结合最后两个grep
吗?