정규식의 산술 연산

정규식의 산술 연산

저는 gedit 정규식 플러그인(Python 스타일 정규식)을 사용하고 있습니다. 일련의 역참조에 대해 산술 연산을 수행하고 싶습니다.

예를 들어:

PART 1 DATA MODELS Chapter  
2 Entity-Relationship Model 27

나는 그것을로 바꾸고 싶다

PART 1 DATA MODELS Chapter  25
2 Entity-Relationship Model 27

내 정규식은 ^(PART.*)\n(.*\s(\d+))\n이고 이를 로 바꾸고 싶습니다 \1 \3-2\n\2\n. 그러나 대체 정규식은 올바르지 않습니다.

답변1

지금은 gedit에 관심이 없지만 vim정규식의 산술은 쉽습니다. 예를 들어:

:%s/\d\+/\=submatch(0)+25/g

각 정수를 찾아 25를 더합니다.

또한보십시오여기유사한 문제에 대한 Perl 솔루션.

답변2

내 이해는 각 행의 끝에 'PART'다음 행의 마지막 숫자에서 2를 뺀 값을 더하고 싶다는 것입니다. 그렇다면 다음을 통해 수행할 수 있습니다 'awk'.

awk '!/^PART/{print}/^PART/{
getline next_line;
match(next_line, "[^ ]*$");
print $0 " " substr(next_line, RSTART) - 2;
print next_line}' <your file>

'PART'이 스크립트는 입력 파일의 마지막 줄이 로 시작하지 않고 , 로 시작하는 줄 뒤의 줄 'PART'끝에 공백과 숫자가 포함된다는 가정 하에 실행됩니다 . 필요한 경우 오류 검사를 추가할 수 있습니다.

관련 정보