Verwenden von Awk:

Verwenden von Awk:

Die Eingabe ist eine Datei (text.txt), die die folgenden Textzeilen enthält (alle Leerzeichen sind Leerzeichen):

2016-10-24 10:25:48.939279-0400 0x63a55    Info        0x0                  1416   backupd: (TimeMachine) [com.apple.TimeMachine.TMLogInfo] Found 2735 files (298.6 MB) needing backup
2016-10-24 10:25:48.954707-0400 0x63a55    Info        0x0                  1416   backupd: (TimeMachine) [com.apple.TimeMachine.TMLogInfo] 6.08 GB required (including padding), 1.2 TB available
2016-10-24 10:27:56.721350-0400 0x63a55    Info        0x0                  1416   backupd: (TimeMachine) [com.apple.TimeMachine.TMLogInfo] Copied 3128 items (283.1 MB) from volume Macintosh HD. Linked 5756.
2016-10-24 10:27:59.652854-0400 0x63a55    Info        0x0                  1416   backupd: (TimeMachine) [com.apple.TimeMachine.TMLogInfo] Created new backup: 2016-10-24-102758
2016-10-24 10:27:59.638560-0400 0x64abb    Error       0x0                  52     UserEventAgent: (TimeMachine) [com.apple.TimeMachine.TMLogError] Failed to send message because the port couldn't be created.
2016-10-24 10:28:00.545654-0400 0x63a55    Error       0x0                  1416   backupd: (TimeMachine) [com.apple.TimeMachine.TMLogError] Could not back up OS X Recovery to /Volumes/BackupA/Backups.backupdb: Error Domain=NSCocoaErrorDomain Code=-69830 "Failed to get info for unmounted Recovery partition (error -69830): This operation requires an unmounted disk" UserInfo={NSLocalizedDescription=Failed to get info for unmounted Recovery partition (error -69830): This operation requires an unmounted disk}

Aus dem obigen Beispiel möchte ichnurder Datums-/Zeitstempel, gefolgt vom gesamten Text nach dem letzten Klammertrennzeichen.

Das ist, was ich vom obigen Beispiel erwarte:

2016-10-24 10:25:48 Found 2735 files (298.6 MB) needing backup
2016-10-24 10:25:48 6.08 GB required (including padding), 1.2 TB available
2016-10-24 10:27:56 Copied 3128 items (283.1 MB) from volume Macintosh HD. Linked 5756.
2016-10-24 10:27:59 Created new backup: 2016-10-24-102758
2016-10-24 10:27:59 Failed to send message because the port couldn't be created.
2016-10-24 10:28:00 Could not back up OS X Recovery to /Volumes/BackupA/Backups.backupdb: Error Domain=NSCocoaErrorDomain Code=-69830 "Failed to get info for unmounted Recovery partition (error -69830): This operation requires an unmounted disk" UserInfo={NSLocalizedDescription=Failed to get info for unmounted Recovery partition (error -69830): This operation requires an unmounted disk}

ich kann nutzenschneiden, aber es werden nur die Daten nach dem Trennzeichen abgerufen.

Zum Beispiel dieses:

cat ~/Desktop/test.txt | grep TimeMachine | rev | cut -d']' -f1 | rev

... lässt den Zeitstempel weg:

Found 2735 files (298.6 MB) needing backup
6.08 GB required (including padding), 1.2 TB available
Copied 3128 items (283.1 MB) from volume Macintosh HD. Linked 5756.
Created new backup: 2016-10-24-102758
Failed to send message because the port couldn't be created.
Could not back up OS X Recovery to /Volumes/BackupA/Backups.backupdb: Error Domain=NSCocoaErrorDomain Code=-69830 "Failed to get info for unmounted Recovery partition (error -69830): This operation requires an unmounted disk" UserInfo={NSLocalizedDescription=Failed to get info for unmounted Recovery partition (error -69830): This operation requires an unmounted disk}

Ich kann das gebrauchen,

cat ~/Desktop/test.txt | grep TimeMachine | cut -c 1-19,140- 

... aber variable Spaltenpositionen sind ein Problem (beachten Sie die letzten beiden Zeilen):

2016-10-24 10:25:48 Found 2735 files (298.6 MB) needing backup
2016-10-24 10:25:48 6.08 GB required (including padding), 1.2 TB available
2016-10-24 10:27:56 Copied 3128 items (283.1 MB) from volume Macintosh HD. Linked 5756.
2016-10-24 10:27:59 Created new backup: 2016-10-24-102758
2016-10-24 10:27:59ogError] Failed to send message because the port couldn't be created.
2016-10-24 10:28:00] Could not back up OS X Recovery to /Volumes/BackupA/Backups.backupdb: Error Domain=NSCocoaErrorDomain Code=-69830 "Failed to get info for unmounted Recovery partition (error -69830): This operation requires an unmounted disk" UserInfo={NSLocalizedDescription=Failed to get info for unmounted Recovery partition (error -69830): This operation requires an unmounted disk}

Ich habe das Gefühl, es gibt keine Möglichkeit,schneidenum zu tun, was ich will, weil ich die Option -c mit der Option -d kombinieren möchte, und ich komme nicht dahinter. Wie soll ich jetzt weitermachen?

Antwort1

cutUm Ihre genaue Frage zu beantworten, ist dies aus den folgenden Gründen nicht geeignet :

  1. Es gibt mehrere Trennzeichen.
  2. Die Anzahl der Felder kann unterschiedlich sein.

Verwenden von Awk:

awk -F']' '{print substr($0,1,19), $NF}' text.txt

Mit Sed:

sed 's/^\(....-..-.. ..:..:..\).*\]\([^]]*\)$/\1 \2/' text.txt

Ich würde die Awk-Methode bevorzugen.

Antwort2

Eine andere sedLösung:

$ sed -E 's/^([^.]+).*\](.*)/\1\2/' ip.txt 
2016-10-24 10:25:48 Found 2735 files (298.6 MB) needing backup
2016-10-24 10:25:48 6.08 GB required (including padding), 1.2 TB available
2016-10-24 10:27:56 Copied 3128 items (283.1 MB) from volume Macintosh HD. Linked 5756.
2016-10-24 10:27:59 Created new backup: 2016-10-24-102758
2016-10-24 10:27:59 Failed to send message because the port couldn't be created.
2016-10-24 10:28:00 Could not back up OS X Recovery to /Volumes/BackupA/Backups.backupdb: Error Domain=NSCocoaErrorDomain Code=-69830 "Failed to get info for unmounted Recovery partition (error -69830): This operation requires an unmounted disk" UserInfo={NSLocalizedDescription=Failed to get info for unmounted Recovery partition (error -69830): This operation requires an unmounted disk}
  • ^([^.]+)Erfassen Sie alle Nicht- .Zeichen vom Zeilenanfang
  • .*\]alles bis zum Ende ]der Zeile ignorieren
  • (.*)verbleibende Zeichen erfassen
  • \1\2erste und zweite erfasste Gruppe
  • Hinweis: Einige sedVersionen verwenden -ranstelle -Eder erweiterten Regex-Option
    • sed 's/^\([^.]\+\).*\]\(.*\)/\1\2/'wenn die erweiterte Regex-Option nicht verfügbar ist

Antwort3

sed 's/\(:[0-9]*\).[0-9 \-]*[a-z0-9]x[0-9a-z]*[ ]*[a-zA-Z]*[ ]*[0-9x]*[0-9 ]*/\1 /'

BEARBEITEN: der sed verwendet Lazy Pattern Matching;

  • alles in Klammern () wird in \1 ausgegeben
  • alles andere wird ignoriert
  • alles danach bleibt unberührt

verwandte Informationen