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 abordar?
Respostas:
Eu sugiro:
Resultado:
FS
contém seu delimitador "ABCD". "ABCD" é uma expressão regular.fonte
awk
pode fazer o trabalho se você fornecer-F
sinalizador com a palavra que deseja usar:No seu caso particular, isso seria:
A julgar pelo seu exemplo, você está apenas tentando imprimir coisas para
ABCD
excluir tudo, depois disso também é uma opção:fonte
awk '{print gensub(/(.*ABCD\.).*/,"\\1",1)}'
.sed
versão:Fonte: /unix/257514/how-to-delete-everything-after-a-ledge-pattern-or-a-string-in-a-file
fonte
grep
solução:A expressão regular corresponderá a cada linha que começa
^
com qualquer caractere.
repetido várias vezes*
e termina com a sequência de caracteresABCD.
A barra invertida\
escapa ao significado especial do ponto.
no final.A opção
-o
informará ogrep
comando para imprimir apenas as partes correspondentes (não vazias) de uma linha correspondente.fonte
cut
pode executar esse trabalho. Não é baseado em uma palavra, mas é baseado em.
delimitador.Usar :
Resultado
xargs
é usado aqui apenas para acrescentar.
no final da stringABCD
.fonte
Estou enfrentando um problema semelhante aqui. O conteúdo do meu arquivo é assim
Quero que o valor de tid seja impresso. Qualquer ajuda é apreciada.
obrigado
fonte