vi 편집기에서 문자열 검색 및 개수 가져 오기


105

vi 편집기를 사용하여 문자열을 검색하고 파일에서 발생 횟수를 찾고 싶습니다.


11
선택한 답변 ( :g/xxxx/d)은이 페이지의 다른 사람보다 끔찍하고 위험하며 열등합니다. 선택을 취소하십시오.
Bruno Bronosky

1
나는 동의하고 그것은 단지 당신이 '발생이 삭제'하지 '라인이 삭제'알
user1709076

답변:


4
:g/xxxx/d

이렇게하면 패턴이있는 모든 줄이 삭제되고 삭제 된 줄 수가보고됩니다. 나중에 되돌리려면 실행 취소하십시오.


6
물론, 그는 "d"를 생략 할 수 있으므로 작업을 수행 할 필요가 없습니다.
Rook

15
이것은 얼마나 많은 행이 아닌지 당신에게 단지 얼마나 많은 줄을 알려줍니다. 더크가 더 나은 해결책이라고 생각합니다.

4
아래의 내 솔루션은 한 줄 내에서 여러 번 발생하는 것을 올바르게 계산하며 실행 취소 할 항목이 없습니다.
Mohit Chakraborty

6
매우 위험한 : 오
ANKIT Zalani

1
이것은 받아 들여지는 / 가장 인기있는 답변이 아닙니다. SO 중재자는 무엇입니까? :(
user1412066


121

n깃발 이 필요합니다 . 단어를 계산하려면 다음을 사용하십시오.

:%s/\i\+/&/gn   

그리고 특정 단어 :

:%s/the/&/gn        

count-items문서 섹션을 참조하십시오 .

간단히 입력하면 :

%s/pattern/pattern/g

그런 다음 상태 줄은 vi에서 일치하는 수를 제공합니다.


이 대답은 빔 사용자를위한 것입니다하지 VI의 것처럼 :( 보이는
kadeshpa

시스템에 vi 만 있습니까? 어떤 버전?
부지런히 2009

누군가 당신의 질문에 vim 태그를 붙였습니다. 제가 제거했습니다.
ojblass

38

: % s / string / string / g가 답을 줄 것입니다.


더 나은 대답입니다. 가능한 경우 +5
ojblass

패턴에 '. *'가 사용되지 않은 경우에만 작동 할 것 같습니다
AK

10
문자열을 반복 할 필요가 없습니다 %s/string//ng.
slm

23

(구스타보가 말한 것과 비슷하지만 추가적으로 :)

어떤을 위해 이전에 검색, 당신은 간단하게 할 수 있습니다 :

:%s///gn

패턴이 이미 검색 레지스터 ( @/)에 있으므로 필요하지 않습니다 .

"%"- s/전체 파일에서 수행
"g"-전역 검색 (한 줄에 여러 히트 포함)
"n"-대체 방지 s/- 아무것도 삭제되지 않습니다! 취소 할 수 없습니다!
( :help s_flag자세한 내용 은 참조 )

(이렇게하면 vim-wikia tip171에 설명 된대로 " 시각적으로 선택된 텍스트 검색 "과 완벽하게 작동합니다. )


3

사용하다

: % s / 패턴 / \ 0 / g

패턴 문자열이 너무 길고 다시 입력하고 싶지 않을 때.


1

짧은 대답 :

: % s / 검색 할 문자열 // gn

학습 :

VI 편집기에는 아래와 같이 3 가지 모드가 있습니다. 여기에 이미지 설명 입력

  • :당신은에서 입력하는 CommandCommand-line모드. 이제, 당신이 작성한 것은 :CLI (Command Line Interface)에 있습니다.
  • %s모든 행을 지정합니다. 범위를 지정하는 %것은 전체 파일에서 대체 를 의미합니다. 모든 발생 대체 구문은 다음과 같습니다.:%s/old-text/new-text/g
  • g행의 모든 ​​항목을 지정합니다. 로 g플래그, 당신은 전체 라인을 대체 할 수 있습니다. 이 g플래그를 사용하지 않으면 줄의 첫 번째 항목 만 대체됩니다.
  • n 발생 횟수를 출력하도록 지정합니다.
  • //이중 슬래시는 replacement text. 우리는 단지 찾고 싶기 때문입니다.

발생 횟수가 확인되면 N키를 눌러 발생 횟수를 하나씩 볼 수 있습니다 .

특정 범위의 행 번호 1에서 10을 찾고 계산하는 경우 :

: 1,10 초 / 안녕하세요 // gn

  • , 유의하시기 바랍니다 %전체 파일에 의해 교체되었습니다됩니다에 대한 ,분리 된 줄 번호.

특정 범위의 행 번호 1에서 10을 찾고 바꾸려면 :

: 1,10 초 / 헬로 / 안녕하세요 / gn


0

다음을 수행하는 것이 좋습니다.

  1. 중 검색 *커서 아래, 또는 표준 무엇을위한 "제한된 검색"할 /pattern검색합니다.
  2. :%s///gn발생 횟수를 가져 오는 데 사용 합니다. 또는을 사용 :%s///n하여 발생이있는 행 수를 가져올 수 있습니다 .

** 저는 모든 검색에서 " N 2 라인 에서 N 1 일치"메시지를 제공하는 플러그인을 찾을 수 있었지만 아쉽습니다.

참고 : 출력의 까다로운 표현에 혼동하지 마십시오. 전자의 명령은 4 matches on 3 lines후자가 당신에게 줄 수있는 것과 같은 것을 줄 수 있습니다 3 matches on 3 lines. 기술적으로는 정확 하지만 후자는 오해의 소지가 있으며 '3 줄 일치'라고 말해야합니다. 따라서 보시다시피 후자 ( 'n'전용) 형식을 사용할 필요가 전혀 없습니다. 'gn'양식을 사용하면 동일한 정보를 더 명확하게 얻을 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.