名前の一部の並べ替え

名前の一部の並べ替え

同じプレフィックスを持つ複数の名前があり、プレフィックスがわかりません。

名前の数字で並べ替えたいです。

つまり

abcd_006-123
abcd_006-232
bbcd_w_006-112

だからbbcd_w_006-112それが最初でなければなりません。

ありがとう

ベストアンサー1

を使用すると、zsh次のグローバルソート機能を定義できます。

digitsOnly() REPLY=${REPLY//[^0-9]} # removes all non-digits

次に、次のように使用します。

print -rC1 -- *(no+digitsOnly)

ここで、nglob修飾子はオプションを対応するnumericglobsortglob拡張に変換し、出力(by)に基づいてo+functionソート$REPLYしますfunction

print -rC1対応するパラメータawをolumnに印刷しますr1 c

を使用すると、ls印刷lsする前にファイルのリストがデフォルトでアルファベット順にソートされます。 GNU実装では、ls次のオプションを使用してソートを回避できます-U

ls -ldU -- *(no+digitsOnly)

次のようにすることができますperl

perl -le 'sub digitsOnly {$_=shift; s/\D//gr};
          print for sort {digitsOnly($a) <=> digitsOnly($b)} <*>'

または、次のファイルリストに対してコマンドを実行します。

perl -l0e 'sub digitsOnly {$_=shift; s/\D//gr};
           print for sort {digitsOnly($a) <=> digitsOnly($b)} <*>' |
   xargs -r0 ls -ldU --

おすすめ記事