Mon enregistreur GPS laisse occasionnellement des lignes "non finies" à la fin des fichiers journaux. Je pense qu'ils sont seulement à la fin, mais je veux vérifier toutes les lignes juste au cas où.Comment trouver des phrases de journal NMEA avec grep?
Un échantillon phrase complète ressemble:
$GPRMC,005727.000,A,3751.9418,S,14502.2569,E,0.00,339.17,210808,,,A*76
La ligne doit commencer par un signe $
, et se terminer par un *
et une somme de contrôle hexagonale deux caractères. Je m'en fous si la somme de contrôle est correcte, juste que c'est présent. Il doit également ignorer les phrases "ADVER" qui n'ont pas la somme de contrôle et sont au début de chaque fichier.
Le code Python suivant pourrait fonctionner:
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)
Est-il possible de le faire avec grep
ou awk
ou quelque chose de simple? Je n'ai pas vraiment compris comment obtenir grep
pour faire ce que je veux.
Mise à jour: Merci @Motti et @ Paul, j'ai pu obtenir ce qui suit pour faire presque ce que je voulais, mais il a dû utiliser des guillemets simples et enlever le $
avant de fuite ça marcherait:
grep -nvE '^\$.*\*[0-9A-F]{2}' *.log | grep -v ADVER | grep -v ADPMB
Deux autres questions se posent, comment puis-je lui faire ignorer les lignes vides? Et puis-je combiner les deux derniers grep
s?