Ich bin neu in der Programmierung !!
Kann jemand helfen, die :
an der ersten Position in einem Zeitstempel zu entfernen ::29.06.2019 23:03:17
Derzeit versuche ich es mit awk / cut-Befehlen wie unten gezeigt:
TDS="$(grep 'Logfile started' process.log | awk '{print $3,$4}' | cut -d: -f2)"
echo "$TDS"
29.06.2019 23
Und die Ausgabe ist nicht das, was ich wollte! Ich möchte es als drucken 29.06.2019 23:03:17
.
quelle
Hier ist eine
sed
Lösung:Der Befehl
sed 's/^://'
ersetzts
das Doppelpunktzeichen:
am Anfang^
jeder Zeile durch die leere Zeichenfolge//
.Hier ist eine knifflige
awk
Lösung, bei der wir das^:
oben beschriebene Feldtrennzeichen auf ändern und das zweite Feld (jeder Zeile) ausgeben:Die Aufgabe könnte auch mit
grep
( Erklärung ) erledigt werden , wahrscheinlich könnte dies die schnellste Lösung für große Datenmengen sein:Oder verarbeiten Sie die Datei direkt mit dem folgenden Befehl, wobei die Einschränkung
^
entfernt wird:Das Obige könnte auch von
sed
und Capture-Gruppen erreicht werden()->\1
:Wo der Ausdruck
^.*<something>.*$
mit der gesamten Zeile übereinstimmt, enthält das<something>
. Der Befehls/old/new/
ersetzt diese Zeile durch den Inhalt der ersten Erfassungsgruppe (der Ausdruck in den Klammern könnte konkreter sein). Die Option-r
aktiviert die erweiterten regulären Ausdrücke. Die Option-n
unterdrückt die normale Ausgabe vonsed
und schließlichp
druckt der Befehl die Übereinstimmungen.quelle
awk
dass es einen FS mit mehreren Zeichen mit Zeichen mit besonderer Bedeutung geben könnte! Was ich heute gelernt habe.Da Sie dies bereits verarbeiten
awk
, können Sie das Ganze auch direkt ausführen:Das
sub
allgemeine Format des Befehls istsub(/REGEX/, REPLACEMENT, TARGET)
und ersetzt alle Übereinstimmungen für den regulären AusdruckREGEX
durch die ZeichenfolgeREPLACEMENT
in der EingabezeichenfolgeTARGET
. Hier ersetzen wir das erste:
(^
bedeutet "den Anfang") aus dem dritten Feld ($3
) durch nichts.Wenn Sie das in awk tun, können Sie natürlich auch alles in awk tun und das Ganze in einer einzigen Operation erledigen:
Oder in Ihrem Fall:
quelle
Eine andere Bash-Lösung:
xargs
konvertiertstdin
(Standardeingabe) in Positionsparameter für denbash
Befehl.echo
durchtail -n1 /path/to/reportfile.txt
.quelle