Perl 정규식은 여러 문자열을 인식합니다.

Perl 정규식은 여러 문자열을 인식합니다.

~/foo.txt다음 각 문자열의 인스턴스를 포함하는 파일이 있습니다.

alpha-1
alpha-2
alpha-3
alpha-4
alpha-5
alpha-6
alpha-7
alpha-8
alpha-9

alpha-X이들 각각을 로 바꾸고 싶습니다 . 다른 인스턴스를 유지하고 싶기 때문에 beta-X단순히 alpha-로 바꾸는 것만으로 beta-는 충분하지 않습니다 .alpha-

나는 이것이 다음과 같은 것으로 이루어질 수 있다고 생각한다.

perl -p -i -e `s/alpha-SOMETHING/beta-SOMETHING/g'

SOMETHING하지만 그것이 무엇이어야 하는지 잘 모르겠습니다 . 여기에 해결책이 있나요?

(물론 9줄의 코드를 실행할 수 있지만 이는 비효율적입니다.)

답변1

perl -p -i -e 's/alpha-(\d)/beta-$1/g'
  • \d0...9와 일치
  • (\d)일치하는 내용을 캡쳐(저장)하여 변수에 할당합니다. $1(다른 캡쳐를 추가하면 다음 변수에 할당됩니다 $2.)
  • 숫자가 두 자리 이상일 수 있는 경우 \d+이를 사용하여 하나 이상의 숫자를 일치시킬 수 있습니다.

답변2

이것은 완벽한 사용 사례입니다시야:

's/alpha(?=-\d)/beta/'

뒤에 가 있는 경우에만 교체됩니다 alpha.beta-\d

관련 정보