如何仅使用 bash 命令(如 sed 和 cat)来恢复某些文本 block 的顺序?我想要的是类似 tac 的东西,但不是逐行操作,而是逐 block 操作。示例:
来自
/Section 3/
Rabbits
Dogs
Cats
/Section 2/
Eagles
Mice
/Section 1/
Dogs
Rabbits
Lemmings
给
/Section 1/
Dogs
Rabbits
Lemmings
/Section 2/
Eagles
Mice
/Section 3/
Rabbits
Dogs
Cats
在某些文件中, block 的开头用斜杠标记,如上例所示。在其他情况下, block 仅由它们之间存在的一个或多个空行标记。
最佳答案
在emacs
中,您可以使用sort-paragraphs
命令:
Ctrl-xhMeta-x段落排序Enter
在 vim
中:https://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/@'
我使用 awk
将数据转换为 csv
,然后对 csv
进行排序
,最后我将 csv
转换回列表样式。
结果:
/Section 1/
Dogs
Rabbits
Lemmings
/Section 2/
Eagles
Mice
/Section 3/
Rabbits
Dogs
Cats
编辑:抱歉,我没有仔细看你的问题。您可以将 sort
命令更改为 tac
以反转顺序。
关于bash - 如何反转文本 block 的顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10874669/