Procmail은 소문자 기능이 있거나 유사한 기능을 갖추고 있습니까?
-
13-11-2019 - |
문제
나는 다음 (고전적인) Procmail refi피드를 사용하여 메일 링리스트 전자 메일을 잡고 목록 이름으로 폴더에 파일을 폴더로 저장합니다.
:0
* ^((List-Id|X-(Mailing-)?List):(.*[<]\/[^>]*))
{
LISTID=$MATCH
:0
* LISTID ?? ^\/[^@\.]*
Lists/$MATCH/
}
.
문제는 다음과 같습니다. 목록 이름이 모든 소문자에서 firstlettercap으로 변경되면 두 개의 폴더, 'ListName'및 다른 'ListName'에 대해 하나의 폴더로 끝납니다.
최종 배달 규칙에서 사용하기 전에 $ Match 변수를 소문자로 소문자로 사용하고 있지만 LC () 함수에 대한 참조를 찾을 수 없거나 사용될 수있는 정규식 / 대체품을 찾을 수 없습니다. 이.
아래의 한 의견은 다음과 같습니다.
:0
* ^((List-Id|X-(Mailing-)?List):(.*[<]\/[^>]*))
{
LISTID=`echo "$MATCH" | tr A-Z a-z`
:0
* LISTID ?? ^\/[^@\.]*
.Lists.$MATCH/
}
.
또한 내가있는 일을하는 것으로 보이지 않는 것으로 보이지 않습니다. 그러나 지금을 보면서, 명확하게 번역은 $ 일치하는 첫 번째 발생에 대해서만 일어나고 있으며, 내 추측은 폴더 할당 라인에서 사용하기 위해 모든 것을 변경하지 않는다는 것입니다.
업데이트 # 1 : 폴더 할당 줄에서 ListID를 사용하려고하면 'Bricolage'라는 대신 'Bricolage.Project.29601.lightHouseApp'와 같은 것을 얻습니다. Bricolage '.
해결책
PROCMAIL 자체는 텍스트를 다른 텍스트로 바꾸는 기능이 없습니다.tr
를 통해 일치를 실행하거나 외부 프로세스를 피하고 외부 프로세스를 피하는 경우 맵핑하는 데 필요한 각 문자에 대한 규칙을 만듭니다.
LISTID=`echo "$LISTID" | tr A-Z a-z`
# or alternatively
:0D
* LISTID ?? ^A\/.*
{ LISTID="a$MATCH" }
:0D
* LISTID ?? ^B\/.*
{ LISTID="b$MATCH" }
# ... etc
.
이 문제를 최종 일치 처리와 결합했으나 명확성을 위해이를 맡을 수 있습니다.
다른 팁
Afaik Procmail 정규 표현식은 항상 대소 문자를 구분하지 않으므로 이미 아무 것도하지 않고 원하는 것을 얻을 수 있습니다.적어도 나는 그것을 항상 그런 식으로 사용했고, 나는 (3+)를 확인한 Procmail 문서가있는 모든 사이트도 그렇게 말했다.