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 -rC1
olumnに対応するパラメータr
awを印刷します。1
C
*(qualifiers)
:glob修飾子を持つglobN
:N
ulglob:一致するものがない場合は空になります。/
:ファイル形式のみ選択目次oe[expression]
:o
式の結果(表現演算後に最初にファイル名を含む値)に基づいてe
リストをソートします。$REPLY
REPLY=${REPLY#?}
:ファイル名の最初の文字を削除します。
ランダムではなくその順序で並べ替えるには、最後に最初の文字(たとえば、、REPLY=${REPLY#?}.$REPLY[1]
)asmith
を追加することもできます。bsmith
csmith