모든 숫자를 어떻게 제거 할 수 있습니까? (점) 파일 내의 모든 줄에서 vim을 사용합니까? 예를 들어 다음 내용이 포함된 파일이 있습니다.
afsdfsd 0.98096764
afsdfd 0.98196765
0.98096764
afsadfsd 0.98096764
adfsd 0.98096764
aadfsd 0.98096425
0.98096425
afsadfsd 0.98096761
` vim의 일부 기능을 사용하여 숫자의 모든 숫자와 점을 제거하는 방법이 궁금합니다(내 파일에서는 점은 숫자에만 존재합니다).
afsdfsd
afsdfd
afsadfsd
adfsd
aadfsd
afsadfsd
답변1
:%s/[0-9]\+\(\.[0-9]\+\)\?//g
이 기본 정규식(BRE) 검색 및 바꾸기 작업은 하나 이상의 숫자(선택적으로 점과 하나 이상의 숫자가 뒤따름)를 제거합니다.
vim
PCRE는 \d
의 동의어로 도 이해되므로 [[:digits:]]
다음과 같이 단축할 수 있습니다.
:%s/\d\+\(\.\d\+\)\?//g
그건 그렇고, 를 :help perl-patterns
참조 하십시오 vim
.
0-9
이는 더 짧을 뿐만 아니라 숫자가 아니거나 고유한 숫자가 아닌 로케일 에서도 작동합니다 .
\v
vim을 정규 표현식에 사용하면 vim을 더 짧게(제 생각에는 더 읽기 쉽게) 만들 수 있습니다.환상적이다정규식 패턴:
%s/\v\d+(\.\d+)?//g
:help magic
에서도 참조하십시오 vim
.
그런데 (예: :%s/[0-9.]\+//g
)와 같은 간단한 정규식은 구두점으로 사용된 마침표(예: 문장 끝이나 줄임표 ...
)도 제거합니다.
답변2
tr
정규식을 사용하여 이를 수행할 수 있지만 필요한 문자 범위를 제거하는 것이 더 간단하다고 생각합니다.
:%!tr -d '.[0-9]'
콜론은 "명령 모드"를 시작합니다. %
"전체 버퍼" 를 의미하며 , !
"다음 쉘 명령을 통해 지정된 범위(전체 버퍼)를 필터링합니다(즉, 명령의 표준 입력에 입력하고 Vim에서 명령의 표준 출력으로 대체합니다)"를 의미합니다.
답변3
|
두 개의 대체 명령을 하나의 기호로 연결할 수 있습니다 . 따라서 먼저 모든 숫자( \d
)를 제거한 다음 모든 마침표( )를 제거할 수 있습니다 \.
.
:%s/\d//g | %s/\.//g
단일 대체 명령에서 파이프를 "OR" 연산자로 사용할 수도 있습니다.
:%s/\d\|\.//g