
A entrada é um arquivo (text.txt) contendo as seguintes linhas de texto (todos os espaços em branco são caracteres de espaço):
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}
A partir do exemplo acima, quero produzirapenaso carimbo de data/hora seguido por todo o texto após o último delimitador de colchetes.
Isso é o que eu quero do exemplo acima:
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}
Eu posso usarcorte, mas só obtém coisas após o delimitador.
Por exemplo isto:
cat ~/Desktop/test.txt | grep TimeMachine | rev | cut -d']' -f1 | rev
... omite o carimbo de data/hora:
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}
Eu posso usar isso,
cat ~/Desktop/test.txt | grep TimeMachine | cut -c 1-19,140-
... mas as localizações variáveis das colunas são um problema (observe as duas últimas linhas):
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}
Tenho a sensação de que não há como usarcortepara fazer o que quero, porque quero combinar a opção -c com a opção -d e não consigo descobrir isso. Para onde devo ir a partir daqui?
Responder1
Para responder exatamente à sua pergunta, esta não é uma boa opção para uso cut
pelos seguintes motivos:
- Existem vários delimitadores.
- Pode haver um número variável de campos.
Usando o Awk:
awk -F']' '{print substr($0,1,19), $NF}' text.txt
Usando Sed:
sed 's/^\(....-..-.. ..:..:..\).*\]\([^]]*\)$/\1 \2/' text.txt
Eu preferiria o método Awk.
Responder2
Outra sed
solução:
$ 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}
^([^.]+)
capturar todos os não.
caracteres do início da linha.*\]
ignore tudo até o último]
da fila(.*)
capturar os personagens restantes\1\2
primeiro e segundo grupos capturados- Nota: Algumas
sed
versões usam-r
em vez-E
da opção regex estendidased 's/^\([^.]\+\).*\]\(.*\)/\1\2/'
se a opção regex estendida não estiver disponível
Responder3
sed 's/\(:[0-9]*\).[0-9 \-]*[a-z0-9]x[0-9a-z]*[ ]*[a-zA-Z]*[ ]*[0-9x]*[0-9 ]*/\1 /'
EDIT: o sed está usando correspondência de padrões preguiçosos;
- qualquer coisa entre colchetes () é impressa em \1
- qualquer outra correspondência é desconsiderada
- qualquer coisa depois permanece intocada