sort
实用程序可让您方便地对文件中的行进行排序。但是,有没有一种优雅的方法可以在 bash 中对空行分隔的段落进行排序?
例如
ccc
aa
aba
bbb
aba
ccc
aaa
必须成为
aaa
aba
bbb
aba
ccc
ccc
aa
一个解决方案似乎是替换所有非空行上的新行符号:
ccc\naa
aba\nbbb
aba\nccc
aaa
然后调用运行 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/