![Perl에서 단일 패턴을 일치시키고 이를 여러 패턴으로 바꾸는 방법 [닫기]](https://linux55.com/image/146213/Perl%EC%97%90%EC%84%9C%20%EB%8B%A8%EC%9D%BC%20%ED%8C%A8%ED%84%B4%EC%9D%84%20%EC%9D%BC%EC%B9%98%EC%8B%9C%ED%82%A4%EA%B3%A0%20%EC%9D%B4%EB%A5%BC%20%EC%97%AC%EB%9F%AC%20%ED%8C%A8%ED%84%B4%EC%9C%BC%EB%A1%9C%20%EB%B0%94%EA%BE%B8%EB%8A%94%20%EB%B0%A9%EB%B2%95%20%5B%EB%8B%AB%EA%B8%B0%5D.png)
다음 정보가 포함된 파일이 있습니다. - 입력 -
a[1]= something_data_1;
a[2]= something_data_2;
a[3]= something_data_3;
따라서 "a"를 아래와 같이 다른 패턴으로 바꾸고 싶습니다. 여기서 diff*는 바꾸려는 문자열입니다.
출력 -
diff1 [1]= something_data_1;
diff2 [1]= something_data_1;
diff3 [1]= something_data_1;
diff1 [2]= something_data_2;
diff2 [2]= something_data_2;
diff3 [2]= something_data_2;
…
나는 시도했다:
/usr/bin/perl -w
open(FH,'<',$file_name);
foreach(<FH>)
{
if(/a(\[.*)/)
{
$_= "diff1$1 ". "diff2$1";
}
}
이것을 시도한 후에 다음과 같은 결과가 나타납니다.
diff[1] = diff2 some_data;
어떻게 해야 할지 모르겠어요
답변1
당신은 다음과 같은 것을 원할 수도 있습니다
chomp(my $line = $_);
if ($line eq "a") {
$_ = "diff1\ndiff2\ndiff3\n";
}
나는 당신이 chomp
아직 편집하지 않았다고 가정하고 있으므로 $_
여전히 세 번째 줄 바꿈입니다. 재사용할 수 있도록 "a" 뒤의 텍스트를 캡처해야 합니다.
if (/^(\s*)a(\[.*)/) {
$_ = "${1}diff1$2".
"${1}diff2$2".
"${1}diff3$2;
}