我的GPS记录器偶尔在日志文件的末尾留下“unfinished”的行。我认为它们只是在最后,但我想检查所有行以防万一。
一个完整的句子示例如下:
$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 -nvE '^\$.*\*[0-9A-F]{2}' *.log | grep -v ADVER | grep -v ADPMB
还有两个问题,我怎么能忽略空行呢?我能结合最后两个grep
吗?
发布于 2018-07-26 07:42:32
可以将grep的结果传递给另一个:
grep -Ev "^\$.*\*[0-9A-Fa-f]{2}$" a.txt |grep -v ADVER
发布于 2018-07-26 09:04:19
删除$表示该行可能以其他内容结束(例如是以下内容)
$GPRMC,005727.000,A,3751.9418,S,14502.2569,E,0.00,339.17,210808,,,A*76xxx
我能结合最后两个
grep
吗?
grep -Ev "ADVER|ADPMB"
https://stackoverflow.com/questions/-100000419
复制相似问题