![매번 다른 문자열을 읽은 후 문자열을 한 번만 바꾸는 루프](https://linux55.com/image/207359/%EB%A7%A4%EB%B2%88%20%EB%8B%A4%EB%A5%B8%20%EB%AC%B8%EC%9E%90%EC%97%B4%EC%9D%84%20%EC%9D%BD%EC%9D%80%20%ED%9B%84%20%EB%AC%B8%EC%9E%90%EC%97%B4%EC%9D%84%20%ED%95%9C%20%EB%B2%88%EB%A7%8C%20%EB%B0%94%EA%BE%B8%EB%8A%94%20%EB%A3%A8%ED%94%84.png)
정기적으로 변경되는 모드를 편집하려고 하는데(모든 캐릭터를 성인으로 만들려고 합니다) 일부 파일에서는 "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>