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 zsh
GNU 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 grep
mit -r
).