2017-02-23 2 views
2

나는 숫자와 문자의 열이있는 파일이 :

0.01182290 0.02526555 0.46794573 RING zinc finger protein putative 0105800 1076 1166 -90 

내가 밑줄로 문자 사이의 공간을 대체 할 수 있습니다.

0.01182290 0.02526555 0.46794573 RING_zinc_finger_protein_putative 0105800 1076 1166 -90 

정규식에 임 새로운는 대체 문자열 [a-zA-Z]\s[a-zA-Z],하지만 난 대체가 무엇인지 알아낼 수 없습니다. 내가 시도한 모든 것은 공백 사이의 글자를 바꾼다.

:%s/[a-zA-Z]\s[a-zA-Z]/??/g/ 
+0

"between"=> "around"? –

답변

7

이를 사용할 수 있습니다

:%s/\v(\a)\s(\a)/\1_\2/g 

생각이 여기에 캡처 그룹을 사용하고 출력에 자신의 캡처 값을 넣어하는 것입니다.

5

훨씬 간단한 대안은 일치와 일치 원자의 끝 (\zs\ze)의 정력의 시작을 활용하는 것입니다 :

:%s/\a\zs\s\ze\a/_/g 

내역 :

  • :%s/ - 대체의 시작 전체 파일에 대한 명령
  • \a - 속칭 [A-Za-z]
  • \zs - 일치하는 문자열의 시작
  • \s - 공간 또는 탭
  • \ze - 일치하는 문자열의 끝
  • \a - 동일
  • /_/ 위와 같이 - _
  • g과 일치하는 문자열을 교체 - 위해 각 줄에 각 발생
+0

'\ a'에 감사드립니다. 나는 그 부분을 내 대답으로 이식했다. –