2

我有给定的文字:

# 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。

4

3 回答 3

5

在 Emacs 中,

  1. M-xsort-regexp-fields
  2. 进入:#[^#]*
  3. 进入:\&

第一个正则表达式分隔记录,第二个指定用于排序的键。

如果您可以自由选择标记字符并使用*而不是#,则可以改用 org-mode 的命令org-sort-entries,这样可以避免输入正则表达式。

于 2012-07-14T13:44:53.053 回答
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$", "")修复了最后一条记录的空白问题。

注意:如果任何块包含@您需要选择不同的分隔符。

于 2012-07-14T13:37:07.667 回答
0

就像是:

:sort! /^#.+\n.+\n$/ 

我不确定行块顺序。

于 2012-07-14T12:58:37.770 回答