Próbuję uruchomić test PEP8 na dużym drzewie źródeł. Drzewo składa się z mieszanki plików w różnych językach. Chodzi o to, aby sprawdzić wszystkie skrypty Pythona bez konieczności ich jawnego wyświetlania. Większość tych plików nie ma tak naprawdę .py
rozszerzenia. Czy istnieje prosty sposób na znalezienie wszystkich plików ze słowem Python w shebang lub znalezienie wszystkich plików, które byłyby uruchamiane przy użyciu Pythona po uruchomieniu?
shell-script
text-processing
search
Marco Ceppi
źródło
źródło
grep -l
przestanie czytać plik, gdy tylko znajdzie dopasowanie, w przypadku plików bez dopasowania, odczyta cały plik. Znajduje również dopasowania w środku plików, więc na przykład może pasować doshar
pliku zawierającego skrypty python.W przypadku GNU, FreeBSD lub NetBSD lub OpenBSD (i potencjalnie innych)
awk
:Spojrzałby tylko na pierwszą linię każdego pliku i uruchomiłby tak mało
awk
s, jak to konieczne.Powyższe
nextfile
stwierdzenie nie jest standardowe, ale można je znaleźć w kilku implementacjach, w tym w GNU (prawdopodobnie z tego, skąd pochodzi).Chociaż powyższy kod wydaje się działać również w innych implementacjach,
nextfile
instrukcja nic by tam nie zrobiła (byłaby rozpoznawana jako wyrażenie składające się znextfile
zmiennej nieustawionej ), co oznaczałoby, że wszystkie pliki zostałyby odczytane w całości, a nazwa pliku być drukowane dla każdej pasującej linii.Jeśli twoje
awk
wsparcieFNR
(takie jak POSIX-owe wersje robią, ale nie oryginalneawk
, więc w Solarisie/usr/xpg4/bin/awk
i nie/usr/bin/awk
) i nienextfile
, możesz to napisać:Co nadal działałoby tak mało
awk
jak to możliwe, ale w pełni odczytywało pliki.Inną alternatywą, aby uniknąć czytania plików całkowicie i że będzie współpracować z każdym
awk
, afind
jednak oznaczałoby uruchomiony jedenawk
na plik będzie:źródło