procmail 레시피에는 발전기 "또는" 연산자가 있습니까?

procmail 레시피에는 발전기 "또는" 연산자가 있습니까?

다음과 같은 procmail 레시피를 고려하면:

:0:
* ^Subject:.*viagra.*
* ^From:.*viagra.*
/dev/null

Procmail은 비아그라에서 온 이메일과 제목에 비아그라가 포함된 이메일만 삭제합니다. 일치하는 항목 중 하나라도 해당되면 필터를 적용할 수 있나요?

해결책은 정규식 연산을 사용하지 않는 것이 바람직 (regex1|regex2)하지만, 이것이 유일한 해결책이라면 그렇다고 말씀해 주십시오.

답변1

당신은 가깝습니다. 정규식에 대한 깊은 이해는 성공적인 procmail 레시피를 만드는 데 큰 도움이 됩니다. Procmail은 매우 유연하지만 그 유연성은 주로 정규 표현식에 달려 있습니다.

:0: 
* ^(From|Cc|To|Subject).*viagara.* 
/dev/null

또는 달성하려는 목표에 더 가깝다고 생각합니다. (가독성을 위해) 다음 줄에서 규칙을 계속하려면 파이프와 새 줄 이스케이프를 사용하세요. 귀하의 예에서는 일치해야 하는 새 조건을 생성했습니다.

:0:
* ^Subject:.*viagra.* |\
  ^From:.*viagra.*
/dev/null

답변2

두 개의 레시피를 사용하세요. 각각은 /dev/null로 이동합니다. 하나는 Subject에 일치하고 다른 하나는 From에 일치합니다. 첫 번째 경기가 승리합니다. 이는 본질적으로 OR 연산자와 동일합니다. reg1|reg2 접근 방식은 효과가 있지만 두 가지 방법을 사용하면 더 명확하게 읽을 수 있다고 생각합니다.

관련 정보