我的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
%s
" % (log, line)
有没有一种方法可以用grep
或awk
或者其他简单的东西来做到这一点?我还没有真正弄清楚如何让grep
做我想做的事情。
更新:感谢@Motti和@Paul,我能够让以下内容几乎完成我想要的操作,但必须使用单引号并删除尾随的$
才能工作:
grep -nvE ^$.**[0-9A-F]{2} *.log | grep -v ADVER | grep -v ADPMB
还有两个问题出现了,我如何让它忽略空白行?我能把最后两个<code>grep</code>组合起来吗?