Unixでは、2番目の文字からフォルダを並べ替える

Unixでは、2番目の文字からフォルダを並べ替える

2番目の文字から始めてディレクトリのリストを並べ替えようとしています。

たとえば、次のコードを実行すると、ディレクトリのリストは最初の文字に基づいて順番に一覧表示されます。

$ ls -1d */
lrodriguez/
mreynolds/
yalberto/

私が達成したいのは、次のように表示することです。

yalberto/
mreynolds/
lrodriguez/

次のフォーラムを確認しました。 名前の一部としてファイルをソートする方法は? しかし、成功しませんでした。

私は次のことを試しましたが、ls -1d -- *?[a-z]* | sort -t?[a-z] -k2何の結果も得られませんでした。 Unix環境には非常に新しいものなので、どのポインタでも非常に役に立ちます。よろしくお願いします。

答え1

を使用すると、次の形式のキーを使用して文字位置を指定sortできます。F.C以内にフィールド。例えば

$ printf '%s\n' */ | sort -k1.2
yalberto/
mreynolds/
lrodriguez/

ディレクトリ名に改行文字が含まれていると、この操作は失敗します。

sort代わりに、NULで区切られたレコードを使用してGNUでこの問題を解決できます。

printf '%s\0' */ | sort -zk1.2 | tr '\0' '\n'

また、拡張には*/ディレクトリへのシンボリックリンクも含まれています。

答え2

そしてzsh

print -rC1 -- *(N/oe['REPLY=${REPLY#?}'])
  • print -rC1olumnに対応するパラメータrawを印刷します。1 C
  • *(qualifiers):glob修飾子を持つglob
  • NNulglob:一致するものがない場合は空になります。
  • /:ファイル形式のみ選択目次
  • oe[expression]o式の結果(表現演算後に最初にファイル名を含む値)に基づいてeリストをソートします。$REPLY
  • REPLY=${REPLY#?}:ファイル名の最初の文字を削除します。

ランダムではなくその順序で並べ替えるには、最後に最初の文字(たとえば、、REPLY=${REPLY#?}.$REPLY[1]asmithを追加することもできます。bsmithcsmith

関連情報