与えられた正規表現と最もよく一致するファイルを開く方法は?

与えられた正規表現と最もよく一致するファイルを開く方法は?

~/mydir複数のテキストファイルを含むディレクトリがあるとします。このディレクトリを検索searchtermして、最も一致するファイルが何であるかを確認したいと思います。単一のコマンドを使用してこれをどのように実行できますか?

答え1

これは、スクリプトに次の行を追加することによって行われます。

grep -c "$1" ~/mydir/* | grep -v ':0' | sort -t: -k2 -r -n | head -1 | sed 's/:.*//' | xargs less

それでは、電話してください。./myscript searchterm

再帰的に検索するには、最初のコマンドでに変更します-c-crgrep

このパイプラインのさまざまな部分(順番に):

grep -c "$1" ~/mydir/*    # Outputs a list of the files in ~/mydir/ with :<count>
                          # appended to each, where <count> is the number of
                          # matches of the $1 pattern in the file.

grep -v ':0'              # Removes the files that have 0 results from
                          # the list.

sort -t: -k2 -r -n        # Sorts the list in reverse numerical order
                          # (highest numbers first) based on the
                          # second ':'-delimited field

head -1                   # Extracts only the first result
                          # (the most matches)

sed 's/:.*//'             # Removes the trailing ':<count>' as we're
                          # done with it

xargs less                # Passes the resulting filename as
                          # an argument to less

一致するものがまったくない場合、Lessは空になります。

答え2

十分

grep -c 'pattern' ~/mydir/* 2>/dev/null| sort -rk2n -t:| sed 's/:.*//;q'

関連情報