괄호 사이에 반복되는 단어를 인라인으로 삭제

괄호 사이에 반복되는 단어를 인라인으로 삭제

우리의 입력은 다음과 같습니다

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명령이 대체된 경우 레이블로 다시 돌아갑니다 .

관련 정보