重複行を繰り返さずに特定の文字列に一致する行を出力する行を記述したいとします。現在のディレクトリのファイルでこの文字列を検索します。
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
またはzsh
GNU を使用する場合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
)。