Di Bash, bagaimana cara menghitung jumlah baris kode yang tidak kosong dalam suatu proyek?
sloc
dan cloc
yang ada di sini untuk menghitung jumlah baris kode tersebut.
Di Bash, bagaimana cara menghitung jumlah baris kode yang tidak kosong dalam suatu proyek?
sloc
dan cloc
yang ada di sini untuk menghitung jumlah baris kode tersebut.
Jawaban:
cat foo.c | sed '/^\s*$/d' | wc -l
Dan jika Anda menganggap komentar sebagai baris kosong:
cat foo.pl | sed '/^\s*#/d;/^\s*$/d' | wc -l
Meskipun, itu tergantung pada bahasa.
< foo.pl sed 'stuff' | wc -l
.
#!/bin/bash
find . -path './pma' -prune -o -path './blog' -prune -o -path './punbb' -prune -o -path './js/3rdparty' -prune -o -print | egrep '\.php|\.as|\.sql|\.css|\.js' | grep -v '\.svn' | xargs cat | sed '/^\s*$/d' | wc -l
Di atas akan memberi Anda jumlah total baris kode (baris kosong dihapus) untuk proyek (folder saat ini dan semua subfolder secara rekursif).
Dalam "./blog" "./punbb" "./js/3rdparty" dan "./pma" di atas adalah folder yang saya daftar hitam karena saya tidak menulis kode di dalamnya. Juga .php, .as, .sql, .css, .js adalah ekstensi dari file yang sedang dilihat. File dengan ekstensi berbeda diabaikan.
$
ke grep ( ...\.js$|...
) jika tidak akan cocok feature.js.swp
.
find . | egrep '.\.c$|.\.h$' | xargs cat | sed '/^\s*$/d' | wc -l
Jika Anda ingin menggunakan sesuatu selain skrip shell, coba CLOC :
cloc menghitung baris kosong, baris komentar, dan garis fisik kode sumber dalam banyak bahasa pemrograman. Ini ditulis seluruhnya dalam Perl tanpa ketergantungan di luar distribusi standar Perl v5.6 dan lebih tinggi (kode dari beberapa modul eksternal tertanam di dalam cloc) dan sangat portabel.
Ada banyak cara untuk melakukan ini, menggunakan utilitas shell umum.
Solusi saya adalah:
grep -cve '^\s*$' <file>
Ini mencari baris dalam <file> baris tidak cocok (-v) yang cocok dengan pola (-e) '^ \ s * $', yang merupakan awal dari sebuah baris, diikuti oleh 0 atau lebih karakter spasi, diikuti pada akhir baris (mis. tidak ada konten selain spasi putih), dan tampilkan hitungan baris yang cocok (-c) alih-alih baris yang cocok itu sendiri.
Keuntungan dari metode ini dibandingkan metode yang melibatkan pemipaan wc
, adalah Anda dapat menentukan beberapa file dan mendapatkan hitungan terpisah untuk setiap file:
$ grep -cve '^\s*$' *.hh
config.hh:36
exceptions.hh:48
layer.hh:52
main.hh:39
-e
tidak perlu. Itulah lokasi posisi normal dari pola dan Anda tidak melakukan apa pun yang funky dengannya. Tetapi tidak ada yang salah dengan menjadi eksplisit, jika itu gaya Anda.
'wc' menghitung baris, kata, karakter, jadi untuk menghitung semua baris (termasuk yang kosong) gunakan:
wc *.py
Untuk menyaring baris kosong, Anda dapat menggunakan grep:
grep -v '^\s*$' *.py | wc
'-v' memberitahu grep untuk menampilkan semua baris kecuali yang cocok dengan '^' adalah awal dari sebuah baris '\ s *' adalah nol atau lebih karakter spasi putih '$' adalah akhir dari baris * .py adalah contoh saya untuk semua file yang ingin Anda hitung (semua file python dalam direktori saat ini) menampilkan output pipa ke wc. Pergilah.
Saya menjawab pertanyaan saya sendiri (asli). Tidak dapat menemukan entri stackoverflow yang membahas hal ini.
Perintah ini menghitung jumlah baris yang tidak kosong. cat fileName | grep -v ^$ | wc -l
grep -v ^ $ fungsi ekspresi reguler mengabaikan baris kosong.
cat
dalam rantai ini:grep -v ^$ fileName | wl -l
wc -l
karena grep memiliki -c
:grep -vc ^$ fileName
cat 'filename' | grep '[^ ]' | wc -l
harus melakukan trik dengan baik
awk '/^[[:space:]]*$/ {++x} END {print x}' "$testfile"
awk '!/^[[:space:]]*$/{++x} END{print x}'
. Atau, jika Anda benar-benar membenci negatif awk '{y++} /^[[:space:]]*$/{++x} END{print y-x}'
grep -cvE '(^\s*[/*])|(^\s*$)' foo
-c = count
-v = exclude
-E = extended regex
'(comment lines) OR (empty lines)'
where
^ = beginning of the line
\s = whitespace
* = any number of previous characters or none
[/*] = either / or *
| = OR
$ = end of the line
Saya memposting ini karena pilihan lain memberikan jawaban yang salah bagi saya. Ini bekerja dengan sumber java saya, di mana baris komentar mulai dengan / atau * (saya menggunakan * pada setiap baris dalam komentar multi-baris).
Berikut skrip Bash yang menghitung baris kode dalam suatu proyek. Itu melintasi pohon sumber secara rekursif, dan mengecualikan baris kosong dan komentar baris tunggal yang menggunakan "//".
# $excluded is a regex for paths to exclude from line counting
excluded="spec\|node_modules\|README\|lib\|docs\|csv\|XLS\|json\|png"
countLines(){
# $total is the total lines of code counted
total=0
# -mindepth exclues the current directory (".")
for file in `find . -mindepth 1 -name "*.*" |grep -v "$excluded"`; do
# First sed: only count lines of code that are not commented with //
# Second sed: don't count blank lines
# $numLines is the lines of code
numLines=`cat $file | sed '/\/\//d' | sed '/^\s*$/d' | wc -l`
# To exclude only blank lines and count comment lines, uncomment this:
#numLines=`cat $file | sed '/^\s*$/d' | wc -l`
total=$(($total + $numLines))
echo " " $numLines $file
done
echo " " $total in total
}
echo Source code files:
countLines
echo Unit tests:
cd spec
countLines
Seperti apa hasilnya untuk proyek saya :
Source code files:
2 ./buildDocs.sh
24 ./countLines.sh
15 ./css/dashboard.css
53 ./data/un_population/provenance/preprocess.js
19 ./index.html
5 ./server/server.js
2 ./server/startServer.sh
24 ./SpecRunner.html
34 ./src/computeLayout.js
60 ./src/configDiff.js
18 ./src/dashboardMirror.js
37 ./src/dashboardScaffold.js
14 ./src/data.js
68 ./src/dummyVis.js
27 ./src/layout.js
28 ./src/links.js
5 ./src/main.js
52 ./src/processActions.js
86 ./src/timeline.js
73 ./src/udc.js
18 ./src/wire.js
664 in total
Unit tests:
230 ./ComputeLayoutSpec.js
134 ./ConfigDiffSpec.js
134 ./ProcessActionsSpec.js
84 ./UDCSpec.js
149 ./WireSpec.js
731 in total
Nikmati! - Curran
Agak akan tergantung pada jumlah file yang Anda miliki di proyek. Secara teori Anda bisa menggunakan
grep -c '.' <list of files>
Di mana Anda dapat mengisi daftar file dengan menggunakan utilitas temukan.
grep -c '.' `find -type f`
Akan memberi Anda jumlah baris per file.
Script untuk menghitung secara rekursif semua baris non-kosong dengan ekstensi file tertentu di direktori saat ini:
#!/usr/bin/env bash
(
echo 0;
for ext in "$@"; do
for i in $(find . -name "*$ext"); do
sed '/^\s*$/d' $i | wc -l ## skip blank lines
#cat $i | wc -l; ## count all lines
echo +;
done
done
echo p q;
) | dc;
Penggunaan sampel:
./countlines.sh .py .java .html
Jika Anda ingin jumlah semua baris yang tidak kosong untuk semua file dari ekstensi file yang diberikan di seluruh proyek:
while read line
do grep -cve '^\s*$' "$line"
done < <(find $1 -name "*.$2" -print) | awk '{s+=$1} END {print s}'
Arg pertama adalah direktori basis proyek, kedua adalah ekstensi file. Penggunaan sampel:
./scriptname ~/Dropbox/project/src java
Ini sedikit lebih dari kumpulan solusi sebelumnya.
grep -v '^\W*$' `find -type f` | grep -c '.' > /path/to/lineCountFile.txt
memberikan jumlah agregat untuk semua file di direktori saat ini dan subdirektori.
HTH!
${-[*]} + $@
, misalnya. Yang pasti kode yang valid di suatu tempat di dunia. ;) Maksud Anda untuk ruang.
rgrep . | wc -l
memberikan jumlah baris tidak kosong dalam direktori kerja saat ini.
Sudah ada program untuk ini di linux yang disebut 'wc'.
Hanya
wc -l *.c
dan itu memberi Anda total baris dan baris untuk setiap file.
wc
menghitung garis kosong. OP ingin menghitung garis yang tidak kosong. Memang benar dia akan ingin menggunakan wc
, tetapi hanya setelah itu telah diedit menggunakan menggunakansed
foo.c
). Adakah pemikiran tentang jumlah baris toal dalam suatu proyek (misalnya banyak file dalam struktur direktori, dan tidak termasuk file biner)?