Сортировать заголовки в алфавитном порядке с помощью регулярных выражений
У меня есть страница уценки, где синтаксис заголовка !!!
, Например:
!!! 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...