または、単一の grep で実行する代わりに、1 つの grep を使用して 3 つ以上の 7 を含むファイルを検索し、別の grep を使用して 4 つ以上の 7 を除外します。
ls -f | egrep '7.*7.*7' | grep -v '7.*7.*7.*7'
作業の一部を短いシェル グロブに移動できます。
ls -f *7*7*7* | grep -v '7.*7.*7.*7'
ただし、そのパターンに一致するファイルが多数ある場合、glob サイズに組み込みの制限があるため、後者は機能しません。
「ls」の「-f」は、「ls」が結果をソートしないようにするためのものです。ディレクトリに膨大な数のファイルがある場合、ソート時間が非常に長くなる可能性があります。
この 2 段階のフィルター プロセスは、[^7] パターンを使用するよりも理解しやすいと思います。
また、オプションとしてそれを要求したため、Python スクリプトとしてのソリューションを次に示します。
import os
for filename in os.listdir("."):
if filename.count("7") == 4:
print filename
これは、改行文字を含む (悪意のある) ファイル名のように、シェル コマンドが処理しないいくつかのケースを処理します。ここでも、その場合の出力はまだ間違っているか、少なくとも下流のプログラムによって準備されていない可能性があります。