- filterex="q0"
- for each in $(sed 's,\^, ,g' <<<"$filter"); do
- if egrep -q '^!' <<<"$each"; then
- this="$(sed 's,^!,,' <<<"$each")"
- filterex="/${this}/q1;{${filterex}}"
- else
- filterex="/${each}/{${filterex}}"
- fi
+ filterex="s;^([0-9]+\t){3}(.+)\n.*$;\2;p"
+ printf '%s\n' "$filter" |tr '^' '\n' \
+ | while read each; do
+ [ "${each:0:1}" = '!' ] && filterex="/^[^\n]+\n(.*\|)?(${each#?})(\|.*)?$/d;{${filterex}}" \
+ || filterex="/^[^\n]+\n(.*\|)?(${each})(\|.*)?$/{${filterex}}"