両方とも一致そしてUnixで複数の列に並べ替え

両方とも一致そしてUnixで複数の列に並べ替え

フォルダには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 '

関連情報