2012-04-17 2 views
2

나는 번호로이 텍스트를 가지고 : P.E. :증가 및 감소 번호는

My numbers are 04, and 0005 
My numbers are 05, and 0006 
My numbers are 06, and 0035 
My numbers are 07, and 0007 
My numbers are 08, and 0009 

이것은 내가 항상 선택/블록 선택/열에서 증가 또는 감소 번호하는 데 사용되는 코드입니다 위 텍스트의 마지막 4 자리 숫자를 8로 늘리십시오.

'<,'>s/\%V\<\d\{4}\>/\=submatch(0)+8/g 

오늘은 이상한 점을 지적했습니다. 이것은 출력 :

My numbers are 04, and 13 
My numbers are 05, and 14 
My numbers are 06, and 37 <--- 
My numbers are 07, and 15 
My numbers are 08, and 17 
  • 이 제거 앞에 0의가 추가
  • (I 제로의이 선도하지 않으면 제로의 하지가 추가 선도가있는 경우이를 유지하려는) 이 2. 추가 (37), (왜?)를 제외한 모든 숫자

사람이 번호를 선택에서 을 빼기/추가 할 수있는 정규식을 찾기 위해 나에게 를 도울 수 (또는 블록 SELEC 8) 0을 잃지 않고?

주 :
내가 제어 A + 제어 x는 앞에 0의 유지와 내가 원하는 작업을 수행하지만 주목 :
- 내가 ('<이 대체 명령에 사용 할 수 없음을 보았다, '> /)
- pe 추가하는 방법을 모르겠다. 200에서 숫자 목록 (200 x?)

+0

이 어떤 도움, 나는 이것이 외부 필터 (예, 펄), 다음 사용을 작성하는 것입니다처럼 물건을 선호하는 방법이 있다면 ! /path/filter.pl 블록에. 이렇게하면 문제를 쉽게 해결할 수 있으며 필터는 재사용 및 수정하기가 쉽습니다. – delicateLatticeworkFever

답변

4

숫자가이됩니다.

(0035)8 == (29)10 

당신은 정력에 테스트 할 수 있습니다

:echo 0035 == 29 

1 (true)를 인쇄 할 수 있습니다.


이 시도 :

:%s/\(\<[0-9]\{4}\>\)\@=0*\([0-9]*\)/\=submatch(2)+8/ 
+0

"@Kev, 나는 당신의 정규식을 검사했다. 잘 작동하지만 텍스트 문자 pe text22text 또는 22text에 첨부 할 때 숫자를 고려하지 않는다는 점에 유의했다. 그 작업을하려면 무엇을 변경해야합니까? (btw I 상수 0을 계속 유지하는 서브 래치 정규 표현식으로는 가능하지 않다고 가정하십시오.) – Reman

2

이?

:%s/\v[0-9]{4}/\=printf("%04d", substitute(submatch(0), '^0\+', '', 0)+8)/ 

편집

@Remonn, 당신은 귀하의 질문에 적절한 샘플 입력을 제공해야합니다. 위의 줄은 당신의 예제에서 작동합니다.

입력 :

40 
20 
120 
0500 
230 
0000000020 
00000000000005000 

정력에 cmd :

48 
28 
128 
0508 
238 
0000000028 
00000000000005008 
:

:%!awk '{if($0~/^0/){f="\%"length($0)"d";$0+=8; s=sprintf(f,$0); gsub(/ /,"0",s);}else s=$0+8;print s}' 

가 파일을 변경합니다 새로운 요구 사항에 대한

취하면 아래의 라인을 보면 내 cmd에

ed '%'를 선택하면 트릭을 원하는 숫자를 선택 (v) 한 다음, 내 cmd로 시도 할 수 있습니다.

기본적으로

+0

켄트, 멋진 정규식을 주셔서 감사합니다. 그러나 0을 선두로하지 않고 숫자에도 숫자를 넣었습니다. (CA/CX처럼) 존재하지 않는 경우 앞에 0을 추가하고 (CA/CX처럼) 추가하지 않습니다. – Reman

+0

'40, 20, 120, 0500, 230' - 위의 정규 표현식 위에 잘못된 결과가 나타납니다. , 200, 1300, 310' – Reman

+0

@ 레몬은 편집 대답을 참조하십시오 – Kent

0

행운, 빔 취급 번호는 8 진수 0로 시작. 내의 .vimrc이이 이러한 이유로

:

set nrformats-=octal " Don't bother with octal, I never use it 
+0

안녕 Johnsyweb, 나는 이것을 확인했지만 아무것도 바뀌지 않았다. – Reman

관련 문제