我有给定的文字:
# Blub
Hello this is a blub text.
# Bla
This is the bla text.
# Abba
Another text.
是否可以使用 对行进行排序#
?所以生成的文本是:
# Abba
Another text.
# Bla
This the bla text.
# Blub
Hello this is a blub text.
最好使用 vim 或 emacs。
在 Emacs 中,
sort-regexp-fields
#[^#]*
\&
第一个正则表达式分隔记录,第二个指定用于排序的键。
如果您可以自由选择标记字符并使用*
而不是#
,则可以改用 org-mode 的命令org-sort-entries
,这样可以避免输入正则表达式。
您没有这样标记它,但我认为这awk
是完成这项工作的最佳工具。使用gawk
以下作品:
gawk RS='\n\n' '{
gsub("\n$", "")
gsub("\n", "@")
print
}' file_to_be_sorted | sort | sed -e 's/$/\n/' -e 's/@/\n/'
通过将记录分隔符 (RS) 设置为 '\n\n'gawk
从每个块创建记录。每条记录都转换为一行,并带有@
分隔符(gsub("\n", "@")
),此时正常sort
工作。sed
然后用于重新创建块。gsub("\n$", "")
修复了最后一条记录的空白问题。
注意:如果任何块包含@
您需要选择不同的分隔符。
就像是:
:sort! /^#.+\n.+\n$/
我不确定行块顺序。