![sed는 패턴의 두 번째 발생과 일치합니다.](https://linux55.com/image/102145/sed%EB%8A%94%20%ED%8C%A8%ED%84%B4%EC%9D%98%20%EB%91%90%20%EB%B2%88%EC%A7%B8%20%EB%B0%9C%EC%83%9D%EA%B3%BC%20%EC%9D%BC%EC%B9%98%ED%95%A9%EB%8B%88%EB%8B%A4..png)
$Subj .= "HAD PROBLEMS";
if ($To) {
$Cc = "abc\@xyz.com";
}
else {
$Cc = "abc\@xyz.com";
}
위의 내용을 파일로 저장했습니다. $Cc의 이메일 ID를 새 이메일 ID로 바꿔야 합니다.
이 작업을 수행하려면 다음 sed 명령이 있습니다.
sed '\|HAD PROBLEMS|,/}/ s/$Cc = (\"[A-Za-z0-9])(.)([A-Za-z0-9]*)\@xyz.com\"/\$Cc = "new email\@xyz.com"/' test.txt
이 명령은 if {} 블록에서 $Cc 변수($Cc의 첫 번째 발생)의 이메일 ID만 대체합니다. 왜냐하면 닫는 일치 패턴이 "}"이기 때문입니다. 또한 두 번째 $Cc의 이메일 ID를 바꾸고 싶습니다. "}"의 두 번째 항목을 어떻게 일치시키나요?
답변1
참조 주소를 새 이메일 주소로 바꾸려면 다음을 시도해 보세요.
$ sed 's/\$Cc.*/\$Cc="new_mail\@abc.com"/g' input.txt
$Subj .= "HAD PROBLEMS";
if ($To) {
$Cc="[email protected]"
}
else {
$Cc="[email protected]"
}