Сортировать заголовки в алфавитном порядке с помощью регулярных выражений

У меня есть страница уценки, где синтаксис заголовка !!!, Например:

!!! Better Heading
This section has a sub-heading
!! Sub-Heading one

!!! Can't think of another one
umm...


!!! A Great Heading
Some text here

Я хотел бы отсортировать блоки текста по алфавиту, начиная с !!! и заканчивая до следующего !!!

Есть ли способ для меня сделать это?

1 ответ

Решение

Попробуй это:

perl -ne 's/^(?!!!!)/###/g; print;' file | sed ':a;N;$!ba;s/\n###/###/g' | sort | sed 's/###/\n/g'

сначала отметьте все строки не из заголовка:

perl -ne 's/^(?!!!!)/###/g; print;' file

!!! Better Heading
###This section has a sub-heading
###!! Sub-Heading one
###
!!! Can't think of another one
###umm...
###
###
!!! A Great Heading
###Some text here

затем удалите \n перед этими линиями:

perl -ne 's/^(?!!!!)/###/g; print;' file | sed ':a;N;$!ba;s/\n###/###/g' 

!!! Better Heading###This section has a sub-heading###!! Sub-Heading one###
!!! Can't think of another one###umm...######
!!! A Great Heading###Some text here

затем сортируйте и заменяйте маркер на \n:

perl -ne 's/^(?!!!!)/###/g; print;' file | sed ':a;N;$!ba;s/\n###/###/g' | sort | sed 's/###/\n/g'

!!! A Great Heading
Some text here
!!! Better Heading
This section has a sub-heading
!! Sub-Heading one

!!! Can't think of another one
umm...
Другие вопросы по тегам