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. 入る:\&

最初の正規表現はレコードを区切り、2番目の正規表現は並べ替えのキーを指定します。

マーカー文字を自由に選択して、の*代わりに使用#できる場合は、代わりに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", "@"))を使用して1行に変換されます。この時点で、通常sortは機能します。sed次に、ブロックを再作成するために使用されます。gsub("\n$", "")最後のレコードの空白の問題を修正します。

注:いずれかのブロックに含まれ@ている場合は、別のセパレーターを選択する必要があります。

于 2012-07-14T13:37:07.667 に答える
0

何かのようなもの:

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

行ブロックの順序がわかりません。

于 2012-07-14T12:58:37.770 に答える