~/mydir
複数のテキストファイルを含むディレクトリがあるとします。このディレクトリを検索searchterm
して、最も一致するファイルが何であるかを確認したいと思います。単一のコマンドを使用してこれをどのように実行できますか?
答え1
これは、スクリプトに次の行を追加することによって行われます。
grep -c "$1" ~/mydir/* | grep -v ':0' | sort -t: -k2 -r -n | head -1 | sed 's/:.*//' | xargs less
それでは、電話してください。./myscript searchterm
再帰的に検索するには、最初のコマンドでに変更します-c
。-cr
grep
このパイプラインのさまざまな部分(順番に):
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'