Como usar as ferramentas GNU para extrair e mesclar duas substrings da mesma string?

1

Suponha que eu receba o seguinte resultado depois de fazer um grep "emailed"

/home/John/logs/2013-07-10.171222-0400EDT.html:I have emailed Mark. Thanks

Eu quero extrair a data disso para que minha saída pareça -

2013-07-10:I have emailed Mark. Thanks

Como posso fazer isso usando qualquer uma das ferramentas GNU? Em particular, eu quero canalizar a saída do grep para a ferramenta. Eu suponho que sed pode ser a ferramenta que faz isso, mas não sei como.

    
por CodeBlue 23.07.2013 / 22:34

1 resposta

3

Isto:

$ <grep-command> | sed -r 's|^.*/([0-9]{4}-[0-9]{2}-[0-9]{2})[^:]*:(.*)|:|'

... deve funcionar. Em detalhe:

  1. -r informa ao sed para usar expressões regulares estendidas .

  2. s|a(b)c(d)|:| diz "corresponde a então b então c então d e substitui a coisa toda por b:d (o primeiro e o segundo itens entre parênteses, separados por : ", onde a .. d são:

    a. ^.*/ - everything ( .* ) desde o início da linha ( ^ ) até o caractere / (é por isso que usamos | em vez de / para separar as cláusulas da% comandos).

    b. [0-9]{4}-[0-9]{2}-[0-9]{2} - um dígito ( [0-9] ) quatro vezes ( {4} ), seguido por um - , seguido por um dígito duas vezes, etc.

    c. [^:]*: - qualquer coisa que não seja a : ( [^:]* ), seguido por : .

    d. .* - todo o resto.

por 23.07.2013 / 22:59