it-swarm-eu.dev

počet (non-blank) řádků kódu v bash

Jak Bash spočítám počet neprázdných řádků kódu v projektu?

128
Jonathan Hartley
cat foo.c | sed '/^\s*$/d' | wc -l

A pokud uvažujete o prázdných řádcích:

cat foo.pl | sed '/^\s*#/d;/^\s*$/d' | wc -l

Ačkoli, to je jazyk závislý. 

165
Michael Cramer
#!/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

Výše uvedené bude celkový počet řádků kódu (prázdné řádky odstraněny) pro projekt (aktuální složka a všechny podsložky rekurzivně).

Ve výše uvedeném "./blog" "./punbb" "./js/3rdparty" a "./pma" jsou složky, které jsem označil jako blacklist, protože jsem v nich nepsal kód. Také soubory .ph, .as, .sql, .css, .js jsou přípony souborů, na které se díváte. Všechny soubory s jinou příponou jsou ignorovány.

50
Gilles

Pokud chcete použít něco jiného než skript Shell, zkuste CLOC :

cloc počítá prázdné řádky, komentářové řádky a fyzické řádky zdrojového kódu v mnoha programovacích jazycích. Je napsáno zcela v Perlu bez závislosti Mimo standard Distribuce Perlu v5.6 a vyšší (Kód z některých externích modulů je vložený do cloc) a tak je docela přenosný.

31
xsl

Existuje mnoho způsobů, jak toho dosáhnout pomocí běžných nástrojů Shell.

Moje řešení je:

grep -cve '^\s*$' <file>

Vyhledává řádky v <file> řádcích, které nesouhlasí (-v), které odpovídají vzoru (-e) '^ s * $', což je začátek řádku, za ním následuje 0 nebo více znaků bez mezer, na konci řádku (tj. žádný obsah jiný než mezery) a namísto odpovídajících řádků zobrazit počet odpovídajících řádků (-c).

Výhodou této metody oproti metodám zahrnujícím pipování do wc je, že můžete zadat více souborů a získat samostatný počet pro každý soubor:

$ grep -cve '^\s*$' *.hh

config.hh:36
exceptions.hh:48
layer.hh:52
main.hh:39
24
SpoonMeiser

„wc“ počítá řádky, slova, znaky, takže se všechny řádky (včetně prázdných) počítají:

wc *.py

Chcete-li odfiltrovat prázdné řádky, můžete použít funkci grep:

grep -v '^\s*$' *.py | wc

'-v' řekne grepu, aby vypsal všechny řádky kromě těch, které odpovídají '^' je začátek řádku 's *' je nula nebo více znaků bez mezer. $ 'je konec řádku *. py je můj příklad pro všechny soubory, které chcete spočítat (všechny pythonové soubory v aktuálním adresáři dir) výstup do kanálu. Jdi.

Odpovídám na svou vlastní (pravou) otázku. Nelze najít položku stackoverflow, která by to zahrnovala.

13
Jonathan Hartley

Tento příkaz počítá počet prázdných řádků v našem projektu.
cat fileName | grep -v ^$ | wc -l
grep -v ^ $ regulární výraz funkce je ignorovat prázdné řádky.

6
coastline
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

Posílám to, protože jiné možnosti mi poskytly špatné odpovědi. To fungovalo s mým zdrojem jazyka Java, kde řádky s komentářem začínají znakem/nebo * (používám * na každém řádku ve víceřádkovém komentáři).

4
sami
cat 'filename' | grep '[^ ]' | wc -l

by měl udělat trik v pohodě

4
curtisk
awk '/^[[:space:]]*$/ {++x} END {print x}' "$testfile"
3
Ben Hoffstein

Zde je skript Bash, který počítá řádky kódu v projektu. Rekurzivně překračuje zdrojový strom a vylučuje prázdné řádky a komentáře jednoho řádku, které používají znak "//".

# $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

Jak vypadá výstup pro můj projekt :

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

Užívat si! - Curran

2
curran

Pokud chcete, aby součet všech nevyplněných řádků pro všechny soubory dané přípony souboru v rámci projektu:

while read line
do grep -cve '^\s*$' "$line"
done <  <(find $1 -name "*.$2" -print) | awk '{s+=$1} END {print s}'

První je základní adresář projektu, druhý je přípona souboru. Použití vzorku:

./scriptname ~/Dropbox/project/src Java

Je to o něco víc než jen soubor předchozích řešení.

1
Andy

Bude to záviset na počtu souborů v projektu. Teoreticky byste mohli použít

grep -c '.' <list of files>

Kde můžete seznam souborů vyplnit pomocí nástroje Najít.

grep -c '.' `find -type f`

Dalo by vám počet řádků na soubor.

1
Linor

Skript rekurzivně počítá všechny prázdné řádky s určitou příponou souboru v aktuálním adresáři:

#!/usr/bin/env bash
(
echo 0;
for ext in "[email protected]"; 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;

Použití vzorku:

./countlines.sh .py .Java .html
1
Keith Pinson

To udává počet řádků bez počítání prázdných řádků:

grep -v ^$ filename wc -l | sed -e 's/ //g' 
1
mahesh
grep -v '^\W*$' `find -type f` | grep -c '.' > /path/to/lineCountFile.txt

poskytuje souhrnný počet pro všechny soubory v aktuálním adresáři a jeho podadresářích.

HTH!

0
Dutch
rgrep . | wc -l

udává počet prázdných řádků v aktuálním pracovním adresáři.

0
jean-emmanuel