Ich versuche, eine PEP8-Prüfung für einen großen Quellbaum durchzuführen. Der Baum besteht aus einer Mischung von Dateien in verschiedenen Sprachen. Die Idee ist, alle Python-Skripte zu überprüfen, ohne sie explizit auflisten zu müssen. Die meisten dieser Dateien haben keine .py
Erweiterung. Gibt es eine einfache Möglichkeit, alle Dateien mit dem Wort Python im Shebang zu finden oder alle Dateien zu finden, die bei der Ausführung mit Python ausgeführt würden?
shell-script
text-processing
search
Marco Ceppi
quelle
quelle
grep -l
Lesen einer Datei zwar keine Übereinstimmung gefunden wird, bei Dateien ohne Übereinstimmung jedoch die gesamte Datei gelesen wird. Es würde auch Übereinstimmungen in der Mitte von Dateien finden, so dass es beispielsweise mit einershar
Datei übereinstimmen könnte , die Python-Skripte enthält.Mit GNU oder FreeBSD oder NetBSD oder OpenBSD (und möglicherweise anderen)
awk
:Würde nur in die erste Zeile jeder Datei schauen und so wenig
awk
s wie nötig ausführen .Die
nextfile
obige Aussage ist kein Standard, findet sich jedoch in einigen Implementierungen, einschließlich der GNU (von der sie wahrscheinlich stammt).Während der obige Code auch in anderen Implementierungen zu funktionieren scheint, würde die
nextfile
Anweisung dort nichts tun (würde als Ausdruck erkannt werden, der aus einer nicht gesetztennextfile
Variablen besteht), was bedeuten würde, dass alle Dateien vollständig gelesen würden und der Dateiname würde für jede passende Zeile gedruckt werden.Wenn Ihre
awk
UnterstützungFNR
(wie POSIX awks, aber nicht das Originalawk
, also unter Solaris/usr/xpg4/bin/awk
und nicht/usr/bin/awk
) und nichtnextfile
, können Sie es schreiben:Was immer noch so wenig
awk
s wie möglich laufen würde, aber die Dateien vollständig lesen würde.Eine weitere Alternative zu vermeiden , dass die Dateien vollständig zu lesen und das würde mit jedem arbeiten
awk
undfind
aber würde bedeuten , läuft eineawk
pro Datei wäre:quelle