#!/bin/bash
|
set -e
|
if [ -z "$1" ]; then
|
source_list=/dev/stdin
|
dest_list=/dev/stdout
|
else
|
source_list="$1"
|
dest_list="$1"
|
fi
|
# Load the file
|
readarray A < "$source_list"
|
# Sort
|
IFS=$'\n'
|
# Stash away comments
|
C=( $(grep -E '^#' <<< "${A[*]}" || :) )
|
A=( $(grep -v -E '^#' <<< "${A[*]}" || :) )
|
# Sort entries
|
A=( $(LC_COLLATE=C sort -f <<< "${A[*]}") )
|
A=( $(uniq <<< "${A[*]}") )
|
# Concatenate comments and entries
|
A=( ${C[*]} ${A[*]} )
|
unset IFS
|
# Dump array back into the file
|
if [ ${#A[@]} -ne 0 ]; then
|
printf '%s\n' "${A[@]}" > "$dest_list"
|
fi
|