重複を無視し、現在のディレクトリのファイルから文字列を取得します。

重複を無視し、現在のディレクトリのファイルから文字列を取得します。

重複した行を繰り返さずに特定の文字列に一致する行を印刷する行を作成したいとします。現在のディレクトリのファイルからその文字列を検索したいと思います。

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

現在のディレクトリファイルをすべて検索するには?

答え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

関連情報