Löschen Sie wiederholte Wörter zwischen Klammern inline

Löschen Sie wiederholte Wörter zwischen Klammern inline

Unsere Eingabe sieht ungefähr so ​​aus:

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]

Und wir möchten eine Ausgabe wie

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]

Löschen Sie grundsätzlich alle wiederholten Zeichenfolgen innerhalb der Klammern. Irgendwelche Vorschläge?

Antwort1

sed -e ': a' -e 's/\(\[[^][]*\)\([A-Z][A-Z][A-Z]*\)\([^][]*\)\2/\1\2\3/' -e 't a'
  • : asetzt ein Label an den Anfang des Skripts.
  • s/\(wibble\)\(foo\)\(bar\)\2/\1\2\3/ersetzt wibblefoobarfoo durch wibblefoobar.
  • [A-Z][A-Z][A-Z]*stimmt mit zwei oder mehr Buchstaben überein
  • t akehrt zum Label zurück a, wenn der vorherige sBefehl eine Ersetzung vorgenommen hat.

verwandte Informationen