Используя некоторые инструменты, такие как grep, sed, awk и sort, вы можете реализовать некоторые ответы с этого другого сайта . Они включают (если вы хотели b, то d тогда все остальное нормально):
Вытяните строки в нужном порядке, начиная с первого, затем второго и т. Д.
grep '^b' myfile > outfile grep '^d' myfile >> outfile grep -v '^b' myfile | grep -v '^d' | sort >> outfile
Сначала добавьте свой собственный «ключ сортировки», затем отсортируйте, а затем удалите его:
sed -e 's/^b/0&/' -e t -e 's/^d/1&/' -e 't' -e 's/^/2/' | sort | sed 's/^.//'
Самый простой выглядит:
используйте такой язык, как Perl, Python или Ruby, который позволяет легко указать пользовательскую функцию сортировки.
perl -e 'print sort {($b =~ /^[bd]/) - ($a =~ /^[bd]/) || $a cmp $b} <>' python -c 'import sys; sys.stdout.write(sorted(sys.stdin.readlines(), key=lambda s: (0 if s[0]=="b" else 1 if s[0]=="d" else 2), s))'
Или попробуйте awk (без объяснения, YMMV):
sort myfile | awk '$0 ~ /^b/ || $0 ~ /^d/ $0 !~ /^b/ && $0 !~ /^d/ { a[f++] = $0 } END { for (word = 0; word < f; word++) { print a[word] } }'