Это похоже на работу:
sort -t '#' -k 2 inputfile
Группирует их по части после символов #:
##.ABC
~more.com##.ABC
###ABC
##.hello
##.test
###test
bob.com###Test
~qwerty.com###Test
###Test
Если вы хотите видеть только уникальные значения:
sort -t '#' -k 2 -u inputfile
Результат:
##.ABC
###ABC
##.hello
##.test
###test
###Test
Это довольно близко дублирует пример выходных данных в вопросе (он опирается на некоторые, возможно, специфичные для GNU функции):
cat -n inputfile |
sed 's/^ *\([0-9]\)/Line \1:/' |
sort -t '#' -k 2 |
awk -F '#+' '{if (! seen[$2]) { \
if ( count > 1) printf "%s\n", lines; \
count = 0; \
lines = "" \
}; \
seen[$2] = 1; \
lines = lines "\n" $0; ++count}
END {if (count > 1) print lines}'
Результат:
Line 5: ##.ABC
Line 9: ~more.com##.ABC
Line 1: ###Test
Line 7: bob.com###Test
Line 8: ~qwerty.com###Test