sort实用程序使您可以方便地对文件中的行进行排序。但是,是否有一种优雅的方法可以在bash中对空行分隔的段落进行排序?

例如

ccc
aa

aba
bbb

aba
ccc

aaa

将不得不成为
aaa

aba
bbb

aba
ccc

ccc
aa

一种解决方案似乎是在所有非空白行上替换新的行符号:
ccc\naa
aba\nbbb
aba\nccc
aaa

然后调用run sort
aaa
aba\nbbb
aba\nccc
ccc\naa

然后还原新行:
aaa

aba
bbb

aba
ccc

ccc
aa

最佳答案

Perl进行救援;

perl -n00 -e 'push @a, $_; END { print sort @a }' file
-00选项启用“段落模式”,该模式将输入拆分为空行。

如果-如您的示例中所示-最后输入行不一定为空,则需要单独添加换行符。
perl -n00 -e 'push @a, $_;
   END { $a[-1] .= "\n" if $a[-1] !~ /\n\n$/;
        print sort @a }' file

关于bash - 从bash对文本文件中的段落进行排序,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37669135/

10-13 23:22