количество (непустых) строк кода в bash
в bash, как подсчитать количество непустых строк кода в проекте?
17 ответов
cat foo.c | sed '/^\s*$/d' | wc -l
и если вы считаете замечания пустые строки:
cat foo.pl | sed '/^\s*#/d;/^\s*$/d' | 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
вышеуказанное даст вам общее количество строк кода (пустые строки удалены) для проекта (текущая папка и все подпапки рекурсивно).
выше "./блог." "/ punbb""./и JS/3rdparty" и "./ pma" - это папки, которые я включил в черный список, поскольку я не писал в них код. Также.на PHP, .как, .язык SQL. ,стиль CSS. ,js-это расширения просматриваемых файлов. Любые файлы с другим расширением игнорируются.
Если вы хотите использовать что-то другое, чем сценарий оболочки, попробуйте CLOC:
cloc считает пустые строки, комментарий линии и физические линии источника код на многих языках программирования. Он полностью написан на Perl без зависимости от стандартных распределение Perl v5.6 и выше (код из некоторых внешних модулей встроенный в cloc), и поэтому довольно портативный.
есть много способов сделать это, используя стандартные утилиты, оболочки.
мое решение:
grep -cve '^\s*$' <file>
это поиск строк в
преимущество этот метод над методами, которые включают трубопровод в wc
, вы можете указать несколько файлов и получить отдельный счетчик для каждого файла:
$ grep -cve '^\s*$' *.hh
config.hh:36
exceptions.hh:48
layer.hh:52
main.hh:39
' wc ' подсчитывает строки, слова, символы, поэтому для подсчета всех строк (включая пустые) используйте:
wc *.py
чтобы отфильтровать пустые строки, вы можете использовать команду grep:
grep -v '^\s*$' *.py | wc
' - v ' сообщает grep выводить все строки, кроме тех, которые соответствуют '^'- начало строки "\s* " - это ноль или более пробелов '$' в конец строки *.py - мой пример для всех файлов, которые вы хотите подсчитать (все файлы python в текущем каталоге) выход трубы в туалет. Иди.
Я ответ на мой собственный (подлинный) вопрос. Не удалось найти запись stackoverflow, которая покрывала это.
эта команда подсчитывает количество непустых строк в нашем проекте.cat fileName | grep -v ^$ | wc -l
функция регулярного выражения grep-v ^$ игнорирует пустые строки.
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
я публикую это, потому что другие варианты дали неправильные ответы для меня. Это работало с моим источником java, где строки комментариев начинаются с / или * (я использую * для каждой строки в многострочном комментарии).
вот скрипт Bash, который подсчитывает строки кода в проекте. Он рекурсивно пересекает исходное дерево и исключает пустые строки и однострочные комментарии, использующие "//".
# $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
вот как выглядит вывод для мой проект:
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
наслаждайтесь! --Керран
это будет зависеть от количества файлов в проекте. Теоретически вы могли бы использовать
grep -c '.' <list of files>
где вы можете заполнить список файлов с помощью утилиты поиска.
grep -c '.' `find -type f`
даст вам количество строк в файле.
скрипт для рекурсивного подсчета всех непустых строк с определенным расширением файла в текущем каталоге:
#!/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;
пример использования:
./countlines.sh .py .java .html
Если вы хотите, чтобы сумма всех непустых строк для всех файлов данного расширения файла в проекте:
while read line
do grep -cve '^\s*$' "$line"
done < <(find -name "*." -print) | awk '{s+=} END {print s}'
первый arg-это базовый каталог проекта, второй-расширение файла. Пример использования:
./scriptname ~/Dropbox/project/src java
это немного больше, чем коллекция предыдущих решений.
grep -v '^\W*$' `find -type f` | grep -c '.' > /path/to/lineCountFile.txt
дает совокупное количество всех файлов в текущем каталоге и его подкаталогах.
HTH!
для этого в linux уже есть программа под названием "wc".
просто
wc -l *.c
и это дает вам общее количество строк и строк для каждого файла.