문제

Bash에서 프로젝트의 비어 있지 않은 코드 줄 수를 어떻게 계산합니까?

도움이 되었습니까?

해결책

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

위의 내용은 프로젝트(현재 폴더 및 모든 하위 폴더를 재귀적으로)에 대한 총 코드 줄 수(빈 줄 제거)를 제공합니다.

위의 "./blog" "./punbb" "./js/3rdparty" 및 "./pma"는 내가 코드를 작성하지 않았기 때문에 블랙리스트에 추가한 폴더입니다.또한 .php, .as, .sql, .css, .js는 검토 중인 파일의 확장자입니다.확장자가 다른 파일은 무시됩니다.

쉘 스크립트가 아닌 다른 것을 사용하려면 다음을 시도하십시오. 클록:

CLOC는 많은 프로그래밍 언어로 빈 줄, 댓글 줄 및 물리적 소스 코드를 계산합니다.그것은 Perl v5.6 이상의 표준 분포 외부에 종속성이없는 Perl에 완전히 작성되며 (일부 외부 모듈의 코드는 CLOC에 내장되어 있음) 휴대가 가능합니다.

일반적인 쉘 유틸리티를 사용하여 이를 수행하는 방법에는 여러 가지가 있습니다.

내 솔루션은 다음과 같습니다

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

이 명령은 <file>에서 행의 시작 부분인 패턴(-e) '^\s*$'와 일치하는 일치하지 않는(-v) 행을 검색하고 그 뒤에 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'는 '^'의 시작 인 ' s *'는 0 이상 또는 더 많은 공백 문자 '$'입니다. 계산하려는 모든 파일 (현재 DIR의 모든 Python 파일) 파이프 출력 WC.나가.

나는 내 자신의 (진짜) 질문에 대답하고 있습니다.이 문제를 다루는 stackoverflow 항목을 찾을 수 없습니다.

이 명령은 비어 있지 않은 줄 수를 계산합니다.
cat fileName | grep -v ^$ | wc -l
grep -v ^$ 정규식 함수는 빈 줄을 무시합니다.

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

트릭을 잘해야 해

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 소스에서 작동했습니다 (여러 줄 주석의 모든 줄에 *를 사용합니다).

awk '/^[[:space:]]*$/ {++x} END {print x}' "$testfile"

다음은 프로젝트의 코드 줄 수를 계산하는 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 $1 -name "*.$2" -print) | awk '{s+=$1} END {print s}'

첫 번째 인수는 프로젝트의 기본 디렉터리이고, 두 번째 인수는 파일 확장자입니다.샘플 사용법:

./scriptname ~/Dropbox/project/src java

이는 이전 솔루션 모음에 불과합니다.

grep -v '^\W*$' `find -type f` | grep -c '.' > /path/to/lineCountFile.txt

현재 디렉터리와 하위 디렉터리에 있는 모든 파일의 집계 수를 제공합니다.

HTH!

빈 줄을 계산하지 않고 줄 수를 계산합니다.

grep -v ^$ filename wc -l | sed -e 's/ //g' 
rgrep . | wc -l

현재 작업 디렉토리에서 비어 있지 않은 행의 수를 제공합니다.

이미 리눅스에는 'wc'라는 프로그램이 있습니다.

단지

wc -l *.c 

총 줄과 각 파일의 줄을 제공합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top