procmail
[Top] [All Lists]

Removing line-wrapped header: gawk

2004-09-09 03:54:45
Both these gawk solutions seem to work. The second is more universal but
slightly slower. As shell script because I don't like programs exceeding
1 line in .rc, but can be easily changed.
GPL, if anyone cares.
Any perl solution suffers from huge overhead, but is more portable. As I
don't speak it I tend to avoid it...

Thanks for your thoughts everyone.

Volker


# Remove all headers of the given name whos value matches the given regular
# expression.
# The header may be folded onto multiple lines. The formatting of headers not
# removed is unchanged.
# Function arguments:
#   $1: beginning of header name (e.g. "X-", or "X-List:"; some limited regular
#       expressions are allowed here)
#   $2: regular expression to match; expressions as for egrep
# Awk portability issues:
#   * IGNORECASE
#   * "\n" string literals
#   * \t in patterns
#   * ENVIRON array (this nicely deals with quoting issues for $2)
rm_header_match() {
    RE="$2" gawk '
        BEGIN { IGNORECASE=1; line=""; RE=ENVIRON["RE"] }
        /^[ \t]/ && line!="" { line = line "\n" $0; next }
        line!="" { if (!match(line, RE)) print line; line="" }
        /^'"$1"'/ { line=$0; next }
        { print }
        '
}

# Remove all header lines which match the given regular expression.
# The header may be folded onto multiple lines. The formatting of headers not
# removed is unchanged.
# rm_header_match() runs slightly faster, but the header name must be fixed.
# Function arguments:
#   $1: regular expression to match; expressions as for egrep
# Awk portability issues: as for rm_header_match()
rm_headerline_match() {
    RE="$1" gawk '
        BEGIN { IGNORECASE=1; line=""; RE=ENVIRON["RE"] }
        /^[ \t]/ && line!="" { line = line "\n" $0; next }
        line!="" { if (!match(line, RE)) print line; line="" }
        /^[^ \t]/ { line=$0; next }
        { print }
        '
}


-- 
Volker Kuhlmann                 is possibly list0570 with the domain in header
http://volker.dnsalias.net/             Please do not CC list postings to me.

____________________________________________________________
procmail mailing list   Procmail homepage: http://www.procmail.org/
procmail(_at_)lists(_dot_)RWTH-Aachen(_dot_)DE
http://MailMan.RWTH-Aachen.DE/mailman/listinfo/procmail