我有给定的文字:
# 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。
答案 0 :(得分:5)
在Emacs中,
sort-regexp-fields
#[^#]*
\&
第一个正则表达式用于分隔记录,第二个用于指定用于排序的键。
如果您可以自由选择标记字符并使用*
而不是#
,则可以使用org-mode的命令org-sort-entries
,这样可以避免进入正则表达式
答案 1 :(得分:0)
类似的东西:
:sort! /^#.+\n.+\n$/
我不确定行块顺序。
答案 2 :(得分:0)
你没有这样标记,但我认为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$", "")
修复了最后一条记录的空白问题。
注意:如果任何块包含@
,则需要选择其他分隔符。