Slice entre duas strings (email + word) [closed]

0

Eu preciso de uma maneira de dividir tudo depois que um e-mail aparecer e antes que um determinado texto seja exibido.

Exemplos de formatos são mostrados aqui:

[email protected]:0:3rw3e:weofkew:StackOverflow=
[email protected]:19.2132.1:StackOverflow=

O formato necessário seria:

[email protected]:StackOverflow= (followded by everything else on the line).

Então, basicamente, cortar depois que um e-mail aparecer e antes de StackOverflow= aparecer.

Notas: Todos os emails são únicos, não são literalmente [email protected]

    
por StackStackAndStack 21.08.2018 / 02:31

1 resposta

0
sed -r 's/(@[^:]+:).*(StackOverflow=)//' input.txt

Explicação

  • sed -r 's/foo/bar/' input.txt : use sed com expressões regulares estendidas, substituindo o padrão foo por bar , para o arquivo input.txt .
  • (@[^:]+:).*(StackOverflow=) : corresponde ao @ no endereço de e-mail, que é seguido por 1 ou mais caracteres que não são : ( [^:]+ ). Isso é seguido por um : . Capture tudo isso nos primeiros grupos de captura com () . Isso é seguido por um número de caracteres .* e, em seguida, StackOverflow= , que também capturamos em um grupo () .
  • /1/2 : substitua essa expressão pelo endereço de e-mail parcial (o primeiro grupo de captura acima), ignore a parte intermediária e, em seguida, o segundo grupo de captura.

N.B. isso faz muitas suposições sobre o formato do arquivo de entrada, por exemplo, o formato do endereço de email, o número de @ e StackOverflow= por linha, etc.

    
por 21.08.2018 / 04:48