Cut comando com palavra como delimitador

7

Existe algum comando de corte para cortar com base em uma palavra  por exemplo:

171212 16082784       6264 XXX     xxxxxxxx Transaction XXXXX abend ABCD. The task has terminated abnormally because of a program check. 16:08:27

Eu quero a saída como:

171212 16082784       6264 XXX     xxxxxxxx Transaction XXXXX abend ABCD.

Como se aproximar?

    
por Anony 13.12.2017 / 04:57

5 respostas

10

Sugiro:

awk -F 'ABCD' '{print $1 FS "."}' file

Saída:

171212 16082784       6264 XXX     xxxxxxxx Transaction XXXXX abend ABCD.

FS contém seu delimitador "ABCD". "ABCD" é um regex.

    
por Cyrus 13.12.2017 / 05:05
4

awk pode fazer o trabalho se você fornecer -F flag com a palavra que deseja usar:

$ awk -F 'test'  '{print $1;print $2}'  <<<  "onetesttwotest"                                                            
one
two

No seu caso particular, isso seria:

$ awk -F 'ABCD' '{print $1,FS}' input.txt                                                                                
171212 16082784       6264 XXX     xxxxxxxx Transaction XXXXX abend  ABCD

A julgar pelo seu exemplo, você está apenas tentando imprimir materiais até ABCD , portanto, excluir tudo depois disso também é uma opção:

$ awk '{print substr($0,0,match($0,/ABCD/)+4);}' input.txt                                                               
171212 16082784       6264 XXX     xxxxxxxx Transaction XXXXX abend ABCD.
    
por Sergiy Kolodyazhnyy 13.12.2017 / 05:06
4

sed versão:

sed 's/ABCD.*/ABCD./' input.txt
171212 16082784       6264 XXX     xxxxxxxx Transaction XXXXX abend ABCD.

Fonte: link

    
por user689314 13.12.2017 / 05:19
2

grep solution:

grep -o '^.*ABCD\.' input.txt

A expressão regular corresponderá a cada linha que começar ^ com qualquer caractere . número repetido de vezes * e termina com a string ABCD. A barra invertida \ escapa o significado especial do ponto . no final.

A opção -o dirá ao comando grep para imprimir apenas as partes correspondentes (não vazias) de uma linha correspondente.

    
por pa4080 15.12.2017 / 08:30
2

cut pode realizar este trabalho. Não baseado em uma palavra, mas com base no . delimiter.

Uso:

cut -f 1 -d '.' input.txt | xargs -I "%" echo %.

Resultado

rooney@bond-pc:~$ cat input.txt 
171212 16082784       6264 XXX     xxxxxxxx Transaction XXXXX abend ABCD. The task has terminated abnormally because of a program check. 16:08:27
rooney@bond-pc:~$ 
rooney@bond-pc:~$ cut -f 1 -d '.' input.txt | xargs -I "%" echo %.
171212 16082784       6264 XXX     xxxxxxxx Transaction XXXXX abend ABCD.

xargs é usado aqui apenas para anexar . no final da string ABCD .

    
por Rooney 15.12.2017 / 09:17