「a」で始まり、後に1桁または2桁の数字が続くすべてのファイルを一覧表示するコマンドは何ですか? (出力にはa0、a1、a2、a3、a00、a01、a99...が表示されますが、a333、b12、art53...は表示されません。)
答え1
zsh
シェルでは、
setopt EXTENDED_GLOB
printf '%s\n' a[[:digit:]](#c1,2)(.)
このパターンは、名前が始まり、後に1つまたは2つの数字が続くすべての一般的なa[[:digit:]](#c1,2)(.)
ファイルと一致します。a
最後に、1つまたは2つの数字に一致する一般的な(.)
ファイル名のみを取得します。[[:digit:]](#c1,2)
sh
または等からbash
、
printf '%s\n' a[[:digit:]] a[[:digit:]][[:digit:]]
これは、anで始まり、1桁または2桁の数字を含むすべての名前を一覧表示しますa
(1桁の名前には1つのパターンを使用し、2桁の名前には別のパターンを使用します)。ただし、通常のファイルの名前のみを取得できるか(ディレクトリ名などを取得することもできます)、一方または他のパターン(またはその両方)が一致しないかどうかはわかりません。どの名前を指定すると、パターンは拡張されていません(一致しないパターンを削除するにはshopt -s nullglob
inを使用してください)。bash
非正規ファイルを消去するには、ループを使用します。
for name in a[[:digit:]] a[[:digit:]][[:digit:]]; do
if [ -f "$name" ]; then
printf '%s\n' "$name"
fi
done
ここでは、-f
各名前に対して明示的なテストを適用します。このテストは本物名前が一般ファイル(または一般ファイルへのシンボリックリンク)を参照している場合。テストが次の場合本物、名前を印刷します。
答え2
使用するシェルに依存しないより一般的な解決策は次のとおりです。
Helios:t larry$ ls -1
a0
a10
a100
ax
axe
b4
Helios:t larry$ find . -mindepth 1 -maxdepth 1 -type f -regextype egrep -regex '\./a[[:digit:]]{,2}'
./a10
./a0
ただし、これにより追加のプロセスが作成されます。