Wie finde ich die Dateien im aktuellen Verzeichnis, die nicht enthalten das Wort foo
(mit grep
)?Wie finde ich Dateien, die kein bestimmtes Zeichenfolgenmuster enthalten?
Antwort
Der folgende Befehl gibt mir alle Dateien, die das Muster nicht foo
enthalten:
find . -not -ipath '.*svn*' -exec grep -H -E -o -c "foo" {} \; | grep 0
Wenn Ihr grep die -L
(oder --files-without-match
) Option:
$ grep -L "foo" *
oder das Äquivalent mit [ack] (http://betterthangrep.com/): 'ack -L 'foo'' – asymmetric
Wie bereits an anderer Stelle erwähnt, hilft ack dabei, .svn (Subversion) -Dateien standardmäßig zu vermeiden. – GuruM
@GuruM Dies kann in GNU Grep erfolgen, indem die Variable 'GREP_OPTIONS = 'exportiert wird - exclude-dir = .svn --exclude-dir = .git'': ^) – bufh
ich viel Glück hatte mit
grep -H -E -o -c "foo" */*/*.ext | grep ext:0
Meine Versuche mit grep -v
gab mir einfach alle Zeilen ohne "foo".
Sie müssen tatsächlich:
find . -not -ipath '.*svn*' -exec grep -H -E -o -c "foo" {} \; | grep :0\$
einen Blick auf ack
nehmen. Es macht den .svn
Ausschluss für Sie automatisch, gibt Ihnen Perl-Ausdrücke und ist ein einfacher Download eines einzelnen Perl-Programms.
Das entspricht dem, was Sie suchen sollten, in ack
sein:
ack -L foo
Nein, das gibt alle Zeilen zurück, die nicht mit 'foo' übereinstimmen. was er sucht, ist 'ack -L foo' – asymmetric
Der folgende Befehl schließt die Notwendigkeit, dass die Entdeckung durch die svn
Ordner zu filtern, um eine zweite grep
verwenden.
grep -rL "foo" ./* | grep -v "\.svn"
Der folgende Befehl könnte Ihnen helfen, die Zeilen zu filtern, die die Teilzeichenfolge "foo" enthalten.
cat file | grep -v "foo"
Dies druckt Zeilen, die nicht übereinstimmen, nicht Namen von Dateien, die keine Übereinstimmung in einer Zeile enthalten. Um Beleidigung der Verletzung hinzuzufügen, ist es ein [nutzloser Gebrauch von 'Katze'] (http://www.iki.fi/era/unix/award.html). – tripleee
grep -irnw "filepath" -ve "pattern"
oder
grep -ve "pattern" < file
obige Befehl wird uns das Ergebnis als -v die Umkehrung des Musters durchsuchte findet
Dies druckt die Zeilen, die das Muster nicht enthalten. Sie können die Option "-l" hinzufügen, um nur den Dateinamen zu drucken. aber das druckt immer noch die Namen von jeder Datei, die * any * Zeile enthält, die das Muster nicht enthält. Ich glaube, das OP möchte die Dateien finden, die keine Zeile enthalten, die das Muster enthält. – tripleee
Meine grep keine Option -L hat. Ich finde Abhilfe, um dies zu erreichen.
Die Ideen sind:
- alle Dateinamen, um die verdiente String in einen txt1.txt Dump enthält.
- dump den gesamten Dateinamen im Verzeichnis zu einem txt2.txt.
machen Sie den Unterschied zwischen der 2-Dump-Datei mit Diff-Befehl.
grep 'foo' *.log | cut -c1-14 | uniq > txt1.txt grep * *.log | cut -c1-14 | uniq > txt2.txt diff txt1.txt txt2.txt | grep ">"
Ich vergesse die Befehle, aber statt Dateinamen zu verwerfen, können Sie tatsächlich ein Diff zwischen zwei Ausgabeströmen machen (ich denke, Sie umgeben die Befehle in Klammern, und da ist auch irgendwo eine spitze Klammer), wenn Ihre Systeme dies unterstützen , was ich denke, ist die Frage, da es 'grep -L 'nicht unterstützt –
find *20161109* -mtime -2|grep -vwE "(TRIGGER)"
Sie können die Filter unter "finden" angeben und den Ausschluß Zeichenfolge unter "grep -vwE".Verwenden Sie mtime unter find, wenn Sie auch nach modifizierter Zeit filtern müssen.
Dies scheint mir alle Zeilen ohne die Zeichenfolge zu zeigen, fragt das OP nur nach den Dateinamen. –
- 1. Wie finde ich ein bestimmtes XSS-Loch?
- 2. Egrep: Wie durchsucht man eine Gruppe von Dateien nach Dateien, die ein bestimmtes Datumsformat enthalten?
- 3. Wie finde ich Tweets, die eine URL enthalten?
- 4. Wie finde ich Zeilen, die eine Zeichenfolge in Linux enthalten
- 5. Wie finde ich Dateien, die einen bestimmten String im Verzeichnis enthalten, mit dem Befehl "find"?
- 6. Wie finde ich heraus, welche Container ein bestimmtes Volumen haben?
- 7. wie auszuschließen Sätze bestimmtes Wort enthalten
- 8. Regex finde Wörter, die eine bestimmte Sequenz enthalten und ein bestimmtes Wort ausschließen
- 9. Sharepoint: Wie finde ich alle Seiten, die ein bestimmtes Webpart hosten?
- 10. Wie finde ich das Modul für ein bestimmtes Cmdlet?
- 11. Wie kann ich nach Dateien suchen, die beide Ausdrücke enthalten?
- 12. Wie finde ich alle Assemblies, die Typ/Member enthalten, die einem Muster entsprechen?
- 13. Wie finde ich Dateien außer dem Vornamen?
- 14. Wie finde ich Dateien, die gerade in Linux geschrieben sind?
- 15. Wie finde ich die 10 größten Dateien in einer Verzeichnisstruktur?
- 16. Wie finde ich die Quelle der dlls und js Dateien?
- 17. Bash - Abrufen von Zeilen aus Dateien, die kein spezifisches Muster enthalten
- 18. Alle Unterverzeichnisse, die nur Dateien enthalten
- 19. Wie finde ich ein Schlüsselwertpaar in einem Wörterbuch mit Werten> 0, wobei die Schlüssel einem bestimmten Zeichenfolgenmuster entsprechen?
- 20. Javac Fehler: Ich finde kein Symbol
- 21. Wie finde ich die Schriftbreite?
- 22. htaccess redirect, wenn die URL kein bestimmtes Verzeichnis enthält
- 23. Wie klicke ich auf einen der href-Links von der Ausgabe, die kein bestimmtes Wort enthält?
- 24. Ruby Löschen von Unterverzeichnissen, die nur ein bestimmtes Verzeichnis enthalten
- 25. Wie finde ich die Module oder Klassen, die ein Modul enthalten?
- 26. Wenn Zellen ein bestimmtes Zahlenformat enthalten, dann
- 27. Wie finde ich alle ausgecheckten Dateien mit ClearCase cleartool?
- 28. Wie finde ich fehlende Dateien von einem Backup?
- 29. TFS: Abfrage nach Builds, die ein bestimmtes Changeset enthalten
- 30. Alle xml-Knoten auswählen, die ein bestimmtes Attribut enthalten
Sie möchten die Grep 0 am Ende zu Grep 0 ändern $ (sonst erhalten Sie fehlerhafte Übereinstimmungen für Dateien, deren Name das Zeichen 0 enthält). – clouseau
@clouseau ist meistens richtig ... Allerdings würde 'grep '0 $'' Dateien mit einem Vielfachen von 10 Zeilen vergleichen! Sie brauchen 'grep ': 0 $'' am Ende, um nach einem expliziten ': 0' am Ende der Zeile zu suchen. Dann erhalten Sie nur Dateien mit übereinstimmenden Nullzeilen. – TrinitronX
Das UNIX, auf dem ich bin, hatte keine Versionen von find oder grep mit diesen Optionen, also musste ich mit dem in anderen Kommentaren vorgeschlagenen "ack" -Befehl gehen. –