Sorting 对文本中的特定行进行排序
我有给定的文本:Sorting 对文本中的特定行进行排序,sorting,vim,emacs,vi,nano,Sorting,Vim,Emacs,Vi,Nano,我有给定的文本: # 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。类似于: :sort! /^#.+\n.+\n$/ 我不确定线
# 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。类似于:
:sort! /^#.+\n.+\n$/
我不确定线路分段顺序 您没有这样标记,但我认为
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”,“@”)
),此时正常的排序工作<然后使用代码>sed
重新创建块gsub(“\n$”,“”)
修复了最后一条记录的空白问题
注意:如果任何块包含@
,则需要选择不同的分隔符。在Emacs中
sort regexp字段
。[^.]*
\&
*
而不是#
,则可以使用组织模式的命令org sort entries
,从而避免您输入regexp