ファイル名の 4 番目と 5 番目の文字を見つけるにはどうすればよいでしょうか?

ファイル名の 4 番目と 5 番目の文字を見つけるにはどうすればよいでしょうか?
$ ls
abcmkde
ghemkde
vdecdde

たとえば、単一の一致を 1 回だけ繰り返して、4 文字目と 5 文字目のみのファイル名をリストしたいだけです (mk上記cdの例の場合)。

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

答え1

Unix 哲学を適用します。つまり、各ジョブに 1 つのツール、そしてそれらを組み合わせるためのシェルです。ジョブは 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、、bashまたはzshの場合mksh:

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

関連情報