Мой GPS-регистратор периодически выходит из строя «незавершенных» строк в конце файлов журнала. Я думаю, что они только в конце, но я хочу проверить все строки на всякий случай.Как найти сломанные предложения журнала NMEA с grep?
Образец законченное предложение выглядит следующим образом:
$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
, чтобы делать то, что я хочу.
Update: Спасибо @Motti и @Paul, я был в состоянии получить следующее делать почти то, что я хотел, но пришлось использовать одиночные кавычки и снимите заднюю $
, прежде чем он будет работать:
grep -nvE '^\$.*\*[0-9A-F]{2}' *.log | grep -v ADVER | grep -v ADPMB
Возникают еще два вопроса, как я могу заставить его игнорировать пустые строки? И могу ли я объединить последние два grep
?