Suche nach einer Zeichenfolge in Dateien im aktuellen Verzeichnis, Duplikate auslassen

Suche nach einer Zeichenfolge in Dateien im aktuellen Verzeichnis, Duplikate auslassen

Angenommen, ich möchte eine Zeile schreiben, die Zeilen ausgibt, die mit einer bestimmten Zeichenfolge übereinstimmen, ohne doppelte Zeilen zu wiederholen. Ich möchte in den Dateien des aktuellen Verzeichnisses nach dieser Zeichenfolge suchen:

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

Wie kann ich in allen aktuellen Verzeichnisdateien suchen?

Antwort1

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

Oder:

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

Mit GNU grep:

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

Oder mit zshGNU grep:

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

Um auch in Dateien in Unterverzeichnissen rekursiv zu suchen:

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

Oder:

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

Mit GNU grep:

grep -hr mystring | LC_ALL=C sort -u

Beachten Sie, dass alle diese Lösungen auch in versteckten Dateien (und Dateien in versteckten Verzeichnissen) suchen, jedoch nicht in nicht-regulären Dateien, und keinen symbolischen Links folgen würden (es sei denn, Sie verwenden eine alte Version von GNU grepmit -r).

verwandte Informationen