埋め込まれた括弧間の重複語の削除

埋め込まれた括弧間の重複語の削除

私たちの入力は次のとおりです

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]

私たちはこのような出力を得たい

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]

デフォルトでは、角かっこ内の重複文字列を削除します。どんな提案がありますか?

ベストアンサー1

sed -e ': a' -e 's/\(\[[^][]*\)\([A-Z][A-Z][A-Z]*\)\([^][]*\)\2/\1\2\3/' -e 't a'
  • : aスクリプトの先頭にタグを設定します。
  • s/\(wibble\)\(foo\)\(bar\)\2/\1\2\3/wibblefoobarfooをwibblefoobarに置き換えます。
  • [A-Z][A-Z][A-Z]*複数の文字の一致
  • t aa前のsコマンドが置き換えられた場合は、ラベルに戻ります。

おすすめ記事