
$ 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