2013-09-30 1 views
1

vi로 정규 표현식을 사용하여 각 행에있는 단어의 중복 문자열을 대체하려면 어떻게합니까? 예를 들어 중복 된 텍스트가있는 항구 목록은 다음과 같습니다.vi로 정규 표현식을 사용하여 각 행에있는 단어의 중복 문자열을 대체하려면 어떻게합니까?

내 목표는 아래의 다음과 같은 출력 달성하는 것입니다 :

(입력) 중복 된 목록을

Andorra La Vella Andorra La Vella 
Al Ain Al Ain 
Abu al Bukhoosh Abu al Bukhoosh 
Ajman Ajman 
Arzanah Island Arzanah Island 
Abu Dhabi Abu Dhabi 
Das Island Das Island 
Al Dhafra Al Dhafra 
Ras Zubbaya (Ras Dubayyah) Ras Zubbaya (Ras Dubayyah) 
Dubai Dubai 
Fateh Terminal Fateh Terminal 
Fujairah (Al-Fujairah) Fujairah (Al-Fujairah) 
Musafa Musafa 
Hamriyah Hamriyah 
Jebel Ali Jebel Ali 
Jebel Dhanna Jebel Dhanna 
Khor Al Fakkan Khor Al Fakkan 
Masfut Masfut 
Mubarras Island Mubarras Island 

(출력) 수정 목록

Andorra La Vella 
Al Ain 
Abu al Bukhoosh 
Ajman 
Arzanah Island 
Abu Dhabi 
Das Island 
Al Dhafra 
Ras Zubbaya (Ras Dubayyah) 
Dubai 
Fateh Terminal 
Fujairah (Al-Fujairah) 
(...) 

어떤 통찰력?

답변

5

파일의 각 라인에 대한 대체 명령을 적용 (http://www.photius.com/seaports/에서 사용 가능한 포트의 전체 목록은) :

:%s/\v(.*)\s*\1/\1/ 

그것은 산출 :

Andorra La Vella 
Al Ain 
Abu al Bukhoosh 
Ajman 
Arzanah Island 
Abu Dhabi 
Das Island 
Al Dhafra 
Ras Zubbaya (Ras Dubayyah) 
Dubai 
Fateh Terminal 
Fujairah (Al-Fujairah) 
Musafa 
Hamriyah 
Jebel Ali 
Jebel Dhanna 
Khor Al Fakkan 
Masfut 
Mubarras Island 
+0

완벽한을 일했다! \ v의 "마법"기능을 설명 할 수 있습니까? –

+0

@ AntónioGonçalves : ** 매우 마법적인 **을 의미하며, 대부분의 캐릭터는 특별한 의미를 갖습니다. 'vim '에서'help magic'을보세요. – Birei

+0

@ AntónioGonçalves :이 방법이 효과가 있다면, 비슷한 질문을하는 사람들이 어떻게 볼 수 있도록 대답을 받아 들여야합니다. – cforbish

관련 문제