매번 다른 문자열을 읽은 후 문자열을 한 번만 바꾸는 루프

매번 다른 문자열을 읽은 후 문자열을 한 번만 바꾸는 루프

정기적으로 변경되는 모드를 편집하려고 하는데(모든 캐릭터를 성인으로 만들려고 합니다) 일부 파일에서는 "character=yes"와 같은 특정 줄을 찾은 후 다음을 찾는 스크립트를 실행해야 합니다. "age = {그들의 나이}"를 반복하고 18에서 45 사이의 임의의 숫자로 바꿉니다.

내가 가진 실제 문제는 문자열 1(char = yes)의 각 인스턴스를 읽은 후 문자열 2(age)의 다음 인스턴스만 찾도록 스크립트에 지시한 다음 중지하고 다음 문자열 1(char =yes)을 찾도록 지시하는 방법입니다. ) 다시.

문자열 2(age)의 모든 인스턴스를 바꾸고 싶지 않습니다. 왜냐하면 동일한 파일의 문자가 아닌 항목에도 작동하기 때문입니다. 따라서 문자열 1(char = yes) 다음에 읽혀지는 문자열 2(age)의 다음 인스턴스를 대괄호로 묶은 블록에 인코딩되어 있기 때문에 바꾸고 싶습니다.

답변1

perl -0777 -pe 's/character = yes.*?age = \K\d+/int(18+rand(45-18+1))/ges' < file

age = <digits>after 의 첫 번째 항목을 다음 character = yes으로 바꿉니다.age = <some-random-number-between-18-and-45>

관련 정보