Excluir palavras repetidas entre colchetes embutidos

2

Nossa entrada parece algo como

2012-04-17  [GBPGBP]
2012-04-13  [GBP GBP]
2012-04-13  [GBP]
2012-04-11  [GBPGBP]
2012-04-11  [GBP GBP]
2012-04-10  [GBPGBP]
2012-04-06  [GBP GBP GBP]
2012-04-17  [GBPGBP]
2012-04-13  [GBP CDN]
2012-04-13  [GBP]
2012-04-11  [GBPCDN]
2012-04-11  [GBP DL DL]
2012-04-10  [PSGBP]
2012-04-06  [PS PS]

E gostaríamos de obter resultados como

2012-04-17  [GBP]
2012-04-13  [GBP]
2012-04-13  [GBP]
2012-04-11  [GBP]
2012-04-11  [GBP]
2012-04-10  [GBP]
2012-04-06  [GBP]
2012-04-17  [GBP]
2012-04-13  [GBP CDN]
2012-04-13  [GBP]
2012-04-11  [GBPCDN]
2012-04-11  [GBP DL]
2012-04-10  [PSGBP]
2012-04-06  [PS]

Basicamente, apague qualquer string repetida entre os colchetes. Alguma sugestão?

    
por Chris 18.04.2012 / 20:53

1 resposta

5
sed -e ': a' -e 's/\(\[[^][]*\)\([A-Z][A-Z][A-Z]*\)\([^][]*\)//' -e 't a'
  • : a define um rótulo no início do script.
  • s/\(wibble\)\(foo\)\(bar\)// substitui o wibblefoobarfoo pelo wibblefoobar.
  • [A-Z][A-Z][A-Z]* corresponde a duas ou mais letras
  • t a retorna ao marcador a se o comando anterior s fez uma substituição.
por 19.04.2012 / 02:02