現在のディレクトリ内のファイル内の文字列を検索し、重複を除外します

現在のディレクトリ内のファイル内の文字列を検索し、重複を除外します

重複行を繰り返さずに特定の文字列に一致する行を出力する行を記述したいとします。現在のディレクトリのファイルでこの文字列を検索します。

grep mystring ***What to put here?** | sort | uniq

現在の dir ファイルすべてを検索するにはどうすればよいでしょうか?

答え1

find . ! -name . -prune -type f -exec cat {} + |
  grep mystring |
  LC_ALL=C sort -u

または:

find . ! -name . -prune -type f -exec cat {} + | awk '
  /mystring/ && !seen[$0]++'

GNUの場合grep:

LC_ALL=C grep -hr --exclude-dir='?*' mystring | LC_ALL=C sort -u

またはzshGNU を使用する場合grep:

grep -h mystring ./*(D.) | LC_ALL=C sort -u

サブディレクトリ内のファイルも再帰的に検索するには:

find . -type f -exec cat {} + |
  grep mystring |
  LC_ALL=C sort -u

または:

find . -type f -exec cat {} + | awk '
  /mystring/ && !seen[$0]++'

GNUの場合grep:

grep -hr mystring | LC_ALL=C sort -u

これらのソリューションはすべて、隠しファイル (および隠しディレクトリ内のファイル) の内部も検索しますが、非通常のファイルは検索せず、シンボリック リンクもたどりません (古いバージョンの GNU をgrepと共に使用しない限り-r)。

関連情報