2009-09-18 6 views
2

VI에서 찾기 및 바꾸기를 시도하여 타임 스탬프를 제거하려고합니다. 나는 보통 S 명령을 사용하여 VI에서이 작업을 수행하지만 VI 내가 콜론을 제거 할 필요가 어떻게 알 수 있습니까 때 VI 명령 자체VI를 사용하여 콜론 제거

EX의 구조의 일부 "xxxxx는 xxxxx는 24:00:00 CDT"

s:24:00:00 CDT::g

s:"24:00:00 CDT"::g

s:/:::g

모든 시도 도움을 주시면 감사하겠습니다.

+2

질문과 일치하도록 제목을 편집하십시오. 콜론이 아니라 타임 스탬프를 제거하려고한다고 가정합니다. –

+4

아니요, 문제는 여러 개의 콜론을 제거하려는 것입니다. 그것이 타임 스탬프라는 사실은 중요하지 않습니다. 중요한 것은 결장이 결석 구분자가 아님을 인식하지 못한다는 것입니다. – Pod

+0

올바른 포드입니다. 지금까지는 콜론이 전부였습니다. 고맙습니다. – homerjay

답변

3

일반적으로 vi는 명령 문자 다음에 오는 문자를 분리 자로 사용합니다.

이 시도 :

s!24:00:00 CDT!!g 
+1

모든 라인이 동일한 타임 스탬프를 가지고 있지 않으면 아주 유용하지 않습니다. –

+1

사실이 특정 문제를 해결하기에 충분했습니다. – homerjay

2

내 버전의 vi에서는 다음을 수행하여 행에서 콜론을 제거 할 수 있습니다. YMMV.

:s/://g 
+0

나를 이길. GVim을 사용 중이며 작동합니다. vi on * nix에 대한 확신이 없습니다. –

+0

질문은 실제로 단일 콜론이 아니라 타임 스탬프를 제거하도록 요구합니다. –

+2

나는 콜론이 문제 였고 OP가 나머지를 어떻게 다뤄야하는지에 대한 질문을했다. 또한 질문 제목은 'VI를 사용하여 콜론 제거'입니다. 그래서 이것은 이것에 대한 최소한의 해석입니다. :) –

2

s/\d\+:\d\+:\d\+ CDT//g 작품을 나를 위해 :

초기 내용 :

xxxxx xxxxx 24:00:00 CDT 

명령 후 :

xxxxx xxxxx 

을 당신이 그것을 확인하려는 경우 의지 단, (같이 그 정규식 상기 자릿수> (1)의 임의의 수의 변경) 타임 스탬프에 영향을 미치는 최종 g 패턴의 모든 항목이 아니라 제 한 변하는

s/\d\d:\d\d:\d\d CDT//g 

를 사용한다. 이 목록에 하나 개 이상의 시간대가있는 경우

, 그룹을 :

:s/\d\+:\d\+:\d\+^Y \(CDT\|UDT\)//g 
1

그것은 당신이 당신이 원하는 구분 기호를 사용하도록해야하기 때문에, 정말 명령의 일부가 아니다.

%s/\d\{2}:\d{2}:\d{2}//g 
6

여기서 문제는 일치하지 않는 대장,하지만 당신은 정력이 정규식의 분리해서 콜론을 사용해야한다고 가르쳤다 봤는데 -을 :

아마 시도 할 것입니다. 이것은 잘못되었습니다.

awk/vi/perl/ruby ​​(및 그 이상)는 원하는 와타 구분 기호를 지정할 수있게합니다.

s/hello/there/ 
s:hello:there: 
[email protected]@[email protected] 

그냥 다른 구분 기호로, 모두 같은 정규식입니다 :이 문자는 (은 S 우리의 경우) 명령 문자 다음 하나의 예입니다.

sMhel/loMthereM 

하는 "M"이 가장하지 않을 수 있지만이 flexability은 자주/사용하지만, 당신은 다음과 일치해야하는 경우/정규식에, 당신은 단지 예를 들어, 다른 구분 기호로 전환 할 수 있음을 의미 정규식에 텍스트가 포함되어있을 때의 선택 - 스타일에 따라 다르며 실제로 일치하는 대상에 따라 다릅니다.

대괄호를 사용할 수도 있습니다. 하나의 정규식의 경우는 다음과 같습니다

s[hello] 

또는

s(hello) 

내가 검색에 생각하고 대체 스타일은 당신이 가능 s[hello][there] 또는 s[hello](there)를 사용할 수 있습니다. 그러나이 괄호에 대한 마지막 문장은 필자가 perl을 사용할 때 기억 한 추측이다.

관련 문제