2017-09-24 3 views
0

나는이 같은 파일이?regex 대체에서 g 플래그를 라인의 일부로 제한 하시겠습니까? 나는 이런 식으로, 각 라인에서만 두 번째 파일 이름에 밑줄을 대체하는 데 사용할 수있는 정규식 기술</p> <pre><code>"File_name_1.dat" "File_name_1.dat" "File_name_2.dat" "File_name_2.dat" "Some_other_thing.dat" "Some_other_thing.dat" </code></pre> <p>있습니까 :

"File_name_1.dat"  "File name 1.dat" 
"File_name_2.dat"  "File name 2.dat" 
"Some_other_thing.dat" "Some other thing.dat" 

열 (Vim의 \ % XXc)과 일치 시키려고했지만 g 플래그를 사용하지 않는 것 같습니다.

:%s/\%25c\([^_]*\)\zs_/ /g 

이은 행의 마지막 밑줄 대체 :

:%s/\%25c\(.*\)\zs_/ /g 

나는 그들이 사라 때까지 나는 그 명령을 반복 할 수 알을

이는 열 (25) 후 첫 밑줄을 대체 , 그러나 그것을하는 더 매끄러운 방법이 있는지 나는 생각하고 있었다.

+1

있습니다 : 여기가 무슨 뜻인지의 스크린 샷이다? – RomanPerekhrest

답변

2

예, 시각적으로 선택하면이 작업을 쉽게 수행 할 수 있습니다. 데이터가 멋지게 배치되면 편리합니다. 그렇지 않으면 작동하지 않습니다.

:'<,'>s/\%V_/ /g 

\%V은 현재 비주얼 선택의 내부에 대체를 제한합니다 :

  • 은 시각적으로 두 번째 파일 이름

  • 실행이 정규식을 모두 선택합니다. 당신이 정력 대체 제외한 다른 접근 방법을 적용 할 수

enter image description here

+0

굉장해! 블록 선택을 시도했지만 \ % V를 사용하지는 않았습니다. 감사! –

1

아마 여러 가지 방법이있을 수 있습니다. 데이터가 잘 포맷되어 있으므로 시각적으로 선택하고 첫 번째 열 (<c-v>)을 삭제하고 :%s/_/ /g을 실행하십시오. 그런 다음 첫 번째 열을 붙여 넣습니다. 당신이 정말로 하나의 정규식에서이 작업을 수행하고자한다면

, 당신은 lookbehind 앞의 요소가 \@<= 일치 일치하는 경우

:%s/\(\%25c.\{-}\)\@<=_/ /g 

을 사용해야합니다. :help \@<=

+0

고마워, 나는 그 lookbehind 패턴을 조사해야 할 것이다. –