Saya mencoba menjalankan pemeriksaan PEP8 terhadap pohon sumber besar. Pohon itu terdiri dari campuran file dalam berbagai bahasa. Idenya adalah untuk memeriksa semua skrip Python tanpa harus secara eksplisit mencantumkannya. Sebagian besar file-file ini sebenarnya tidak memiliki .py
ekstensi. Apakah ada cara sederhana untuk menemukan semua file dengan kata Python di shebang atau menemukan semua file yang akan dijalankan dengan Python ketika dieksekusi?
shell-script
text-processing
search
Marco Ceppi
sumber
sumber
grep -l
akan berhenti membaca file segera setelah menemukan kecocokan, untuk file tanpa kecocokan, itu akan membaca seluruh file. Itu juga akan menemukan kecocokan di tengah file, jadi misalnya itu bisa cocok denganshar
file yang berisi skrip python.Dengan GNU, atau FreeBSD atau NetBSD atau OpenBSD (dan yang lainnya)
awk
:Akan terlihat hanya pada baris pertama setiap file dan akan berjalan sesedikit yang
awk
diperlukan.The
nextfile
pernyataan di atas tidak standar tetapi ditemukan dalam beberapa implementasi termasuk salah satu GNU (yang mungkin di mana ia berasal dari).Sementara kode di atas akan tampak berfungsi dalam implementasi lain juga,
nextfile
pernyataan itu tidak akan melakukan apa pun di sana (akan dikenali sebagai ekspresi yang terdiri darinextfile
variabel yang tidak disetel ), sehingga itu berarti semua file akan dibaca sepenuhnya dan nama file akan dicetak untuk setiap baris yang cocok.Jika
awk
dukungan AndaFNR
(seperti POSIX awks melakukan tetapi bukan yang asliawk
, jadi pada Solaris/usr/xpg4/bin/awk
dan bukan/usr/bin/awk
) dan tidaknextfile
, Anda dapat menulisnya:Yang masih akan berjalan sesedikit
awk
mungkin tetapi akan membaca file sepenuhnya.Alternatif lain untuk menghindari membaca file sepenuhnya dan itu akan bekerja dengan setiap
awk
danfind
tetapi berarti menjalankan satuawk
per file adalah:sumber