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" and "./pma " - это папки, которые я включаю в черный список, поскольку я не писал в них код. Также.на PHP, .как, .язык SQL. ,стиль CSS. ,js-это расширения рассматриваемых файлов. Все файлы с другим расширением игнорируются.
Если вы хотите использовать что-то другое, чем сценарий оболочки, попробуйте CLOC:
cloc считает пустые строки, комментарий линии, и физическим линиям источника код на многих языках программирования. Оно полностью написан на Perl без зависимости от стандартных распределение Perl v5. 6 и выше (код из некоторых внешних модулей встроенный в cloc) и так довольно портативный.
есть много способов сделать это, используя стандартные утилиты, оболочки.
мое решение:
grep -cve '^\s*$' <file>Это ищет строки в
не совпадают (-v) строки, которые соответствуют шаблону (-e) '^\s*$', который является началом строки, за которым следуют 0 или более символов пробела, а затем конец строки (т. е. нет содержимого, кроме пробелов), и отображать количество совпадающих строк (-c) вместо самих совпадающих строк. преимущество этот метод над методами, которые включают трубопроводы в
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наслаждайтесь! -- Curran
это будет зависеть от количества файлов в проекте. В теории вы могли бы использовать
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дает совокупное количество всех файлов в текущем каталоге и его подкаталогах.
НТН!
для этого уже есть программа на linux под названием "wc".
просто
wc -l *.cи это дает вам общее количество строк и строк для каждого файла.
Comments