如何逆转文本块的顺序

Str*_*sky 9 sorting bash text

如何仅使用像sed和cat这样的bash命令来恢复某些文本块的顺序?我想要的是像tac,但不是逐行操作,而是逐块操作.例:

/Section 3/
Rabbits
Dogs
Cats

/Section 2/
Eagles
Mice

/Section 1/
Dogs
Rabbits
Lemmings
Run Code Online (Sandbox Code Playgroud)

/Section 1/
Dogs
Rabbits
Lemmings

/Section 2/
Eagles
Mice

/Section 3/
Rabbits
Dogs
Cats
Run Code Online (Sandbox Code Playgroud)

在某些文件中,块的开头用斜杠标记,如上例所示.在其他情况下,块仅通过它们之间存在一个或多个空行来标记.

kev*_*kev 4

在 中emacs,您可以使用sort-paragraphs命令:

Ctrl-xhMeta-xsort-paragraphsEnter


vimhttps://superuser.com/questions/365094/sort-file-per-paragraph-in-vim


使用基本的 UNIX 工具:

awk -F'\n' -vRS='' -vOFS=',' '{$1=$1}1' input.txt |
    sort |
        tr ',' '\n' |
            sed 's@^/@\n/@'
Run Code Online (Sandbox Code Playgroud)

我用来awk将数据转换为 a csv,然后sortcsv,最后我将数据转换csv回列表样式。


结果:

/Section 1/
Dogs
Rabbits
Lemmings

/Section 2/
Eagles
Mice

/Section 3/
Rabbits
Dogs
Cats
Run Code Online (Sandbox Code Playgroud)

编辑:抱歉,我没有仔细看你的问题。您可以更改sort命令tac以反转顺序。