summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xsrc/lib/blacklist.sh14
1 files changed, 9 insertions, 5 deletions
diff --git a/src/lib/blacklist.sh b/src/lib/blacklist.sh
index 6c507f4..10eafef 100755
--- a/src/lib/blacklist.sh
+++ b/src/lib/blacklist.sh
@@ -2,6 +2,7 @@
# This may be included with or without `set -euE`
# Copyright (C) 2013-2014, 2016-2017 Luke Shumaker <lukeshu@sbcglobal.net>
+# Copyright (C) 2017 Isaac David <isacdaavid@isacdaavid.info>
#
# License: GNU GPLv2+
#
@@ -24,11 +25,14 @@
# Usage: blacklist-normalize <$file
# Normalizes the syntax of the blacklist on stdin.
blacklist-normalize() {
- sed -r -e '/^#/d' \
- -e 's/^[^:]*$/&::::/' \
- -e 's/^[^:]*:[^:]*$/&:::/' \
- -e 's/^[^:]*(:[^:]*){2}$/&::/' \
- -e 's/^[^:]*(:[^:]*){3}$/&:/'
+ # dynamically build sed expression based on number of fields
+ local -a expr
+ local fields=5 sep=: i
+ for (( i = $fields - 2; i >= 0; --i )); do
+ expr+=('-e' "s/^[^:]*(:[^:]*){${i}}$/&${sep}/")
+ sep+=${sep:0:1}
+ done
+ sed -r -e '/^#/d' "${expr[@]}"
}
# Usage: blacklist-cat