ファイル名の4番目と5番目の文字を見つける方法は?

ファイル名の4番目と5番目の文字を見つける方法は?
$ ls
abcmkde
ghemkde
vdecdde

たとえば、4番目と5番目の文字のみを含み、単一の一致が1回だけ繰り返されるファイル名のみを一覧表示しようとします(上記の例mkでは)。cd

名前が異なり、4番目と5番目の文字が異なるファイルがたくさんあります。

答え1

各タスクのためのツールとそれをまとめるシェルと呼ばれるUnix哲学を適用します。合計3つのポジションがあります。

  • ファイル名を一覧表示します。ファイル名に印刷できない文字や制御文字が含まれていない場合、解析された出力はls合理的です。特定のファイルのみを一覧表示するには、次のものを使用できます。

    printf '%s\n' *.ext
    

    1行に1つの名前をリストします。

  • 興味のあるファイル名の部分を抽出します。 4番目と5番目の文字を抽出するにはcut -b 4,5(シングルバイト文字の場合)またはcut -c 4,5(マルチバイト文字の場合は許可)を使用できます。

  • 重複したアイテムを削除してください。最も簡単な方法はsort -u(これを行うと部品も揃います)です。

管路このプログラムに参加してください。明らかにする

ls | cut -b 4,5 | sort -u

答え2

ksh93、または:bashzshmksh

for file in *; do
    printf '%s\n' "${file:3:2}"
done | sort -u

関連情報