フォルダには200以上のファイルがあり、その一部には次のパターンを含むレコードがあります。
ABCD<Space><tab><Space>,EFGH,<SPACE>,
。
変更または置き換えることなく、この形式のファイル数だけを知りたいです。
答え1
GrepにはPerl正規表現モード(-P)とカウント専用(-c)があります。
$ grep -c -P 'ABCD\ \t\ ,EFGH,\ ,' file
1
答え2
このパターンを使用してファイル数を取得します。
grep -rlP "ABCD \t ,EFGH, " directory | wc -l
r
再帰的なファイル検索P
パールモードl
印刷は通常、出力に各入力ファイルの名前を印刷します。検索は最初の一致で停止します。- 行
ファイルのリストを取得します。
grep -rlP "ABCD \t ,EFGH, " directory | awk -F '/' '{print $2}'
答え3
このコマンドは、現在のディレクトリのパターンに一致するファイル数を計算します。
grep -Psl 'ABCD \t ,EFGH, ,' * | wc -l
(他のほとんどのソリューションと同様に、名前に改行文字を含むファイルを誤って計算します。GNUの世界ではgrep -PZsl '...pattern...' * | tr '\n\0' 'X\n' | wc -l
この問題を解決するために使用できます。)
答え4
そしてzsh
(cd folder && grep -l $' \t ' ./*(D.)) | grep -c /
folder
少なくとも1回は計算ディレクトリに含まれています<space><tab><space>
。
再帰的に:
(cd folder && grep -l $' \t ' .//**/*(D.)) | grep -c //
再帰的に以下を使用することもできますfind
。
(cd folder && find .//. -type f -exec grep -l $' \t ' {} +) | grep -c //
最初の列のファイルのみを考慮するには、<space><tab><space>
モードをに変更します$'^[^,]* \t '
。