Die Protokolldatei sieht folgendermaßen aus
34.3.23.58 07:20:01 AM all 0.02 0.00 0.02 0.00 0.00 99.97
34.3.23.58 07:30:01 AM all 0.02 0.00 0.02 0.00 0.00 99.97
34.3.23.58 07:40:01 AM all 0.02 0.00 0.02 0.00 0.00 99.97
34.3.23.58 Average: all 0.02 0.00 0.02 0.00 0.00 99.96
34.3.23.60 Linux 3.10.0-514.26.2.el7.x86_64 (dns) 09/25/2019 _x86_64_ (4 CPU)
Wir möchten nur die Zeilen erfassen, wenn das zweite Feld Stunde:Minute:Sekunde ist
als die folgenden erwarteten Ergebnisse
cat info.txt
34.3.23.58 07:20:01 AM all 0.02 0.00 0.02 0.00 0.00 99.97
34.3.23.58 07:30:01 AM all 0.02 0.00 0.02 0.00 0.00 99.97
34.3.23.58 07:40:01 AM all 0.02 0.00 0.02 0.00 0.00 99.97
wir versuchen
cat info.txt | awk '$2 =~ [0-9][0-9]/:[0-9][0-9]:[0-9][0-9]'
aber mit Fehlern ausgeführt
awk: cmd. line:1: $2 =~ [0-9][0-9]/:[0-9][0-9]:[0-9][0-9]
awk: cmd. line:1: ^ syntax error
awk: cmd. line:1: $2 =~ [0-9][0-9]/:[0-9][0-9]:[0-9][0-9]
awk: cmd. line:1: ^ syntax error
awk: cmd. line:1: $2 =~ [0-9][0-9]/:[0-9][0-9]:[0-9][0-9]
awk: cmd. line:1: ^ syntax error
awk: cmd. line:1: $2 =~ [0-9][0-9]/:[0-9][0-9]:[0-9][0-9]
awk: cmd. line:1: ^ unterminated regexp
Antwort1
Die richtige Syntax ist
<info.txt awk '$2 ~ /^[0-9][0-9]:[0-9][0-9]:[0-9][0-9]$/'
Änderungen:
- Kein nutzloser Einsatz von
cat
. - Der Betreiber ist
~
. - Das Muster muss von Schrägstrichen ( ) umschlossen werden
/regex/
. ^
und$
passen jeweils zum Anfang und Ende der übereinstimmenden Zeichenfolge (hier$2
).