bash의 코드 줄 수(공백이 아닌)
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는 볼 파일의 확장자입니다.확장명이 다른 파일은 무시됩니다.
일반적인 셸 유틸리티를 사용하여 이 작업을 수행하는 방법은 여러 가지가 있습니다.
내 솔루션은 다음과(와)
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
셸 스크립트가 아닌 다른 것을 사용하려면 CLOC:
시계는 여러 프로그래밍 언어에서 소스 코드의 빈 줄, 주석 줄 및 물리적 줄을 계산합니다.표준 배포판 Perl v5.6 이상(일부 외부 모듈의 코드가 cloc에 포함됨) 외부에 종속성이 없는 Perl로 전적으로 작성되므로 휴대성이 매우 뛰어납니다.
이 명령은 비어 있지 않은 줄의 수를 계산합니다. cat fileName | grep -v ^$ | wc -l
grep -v ^$ 정규식 함수는 빈 줄을 무시합니다.
'wc'는 줄, 단어, 문자를 카운트하므로 모든 줄(공백 포함)을 카운트하려면 다음을 사용합니다.
wc *.py
빈 줄을 필터링하려면 grep:
grep -v '^\s*$' *.py | wc
'-v'는 grep에게 '^'와 일치하는 것이 0인 줄의 시작인 줄을 제외한 모든 줄을 출력하도록 지시합니다. '\s*'는 줄의 끝입니다. '$'는 wc에 카운트하려는 모든 파일(현재 dir의 모든 파이썬 파일) 파이프 출력에 대한 예입니다.어서 가.
저는 제 질문에 답하고 있습니다.이 문제를 해결하는 스택 오버플로 항목을 찾을 수 없습니다.
cat file.txt | awk 'NF' | wc -l
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 -vc ^$ fileName
와 함께-c
옵션, 당신은 심지어 필요하지도 않습니다.wc -l
프로젝트에 있는 파일 수에 따라 달라질 수 있습니다.이론적으로 당신은 사용할 수 있습니다.
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
이는 이전 솔루션의 모음에 불과합니다.
rgrep . | wc -l
현재 작업 디렉터리에서 비어 있지 않은 줄의 수를 제공합니다.
grep -v '^\W*$' `find -type f` | grep -c '.' > /path/to/lineCountFile.txt
현재 디렉터리 및 하위 디렉터리에 있는 모든 파일의 집계 수를 제공합니다.
HTH!
이렇게 하면 빈 줄 수를 계산하지 않고 줄 수를 계산할 수 있습니다.
grep -v ^$ filename wc -l | sed -e 's/ //g'
사용해 보십시오.
> grep -cve ^$ -cve '^//' *.java
그것은 외우기 쉽고 또한 빈 줄과 주석이 달린 줄을 제외합니다.
리눅스에는 이미 'wc'라는 프로그램이 있습니다.
그저.
wc -l *.c
각 파일의 총 줄 수와 줄 수를 제공합니다.
언급URL : https://stackoverflow.com/questions/114814/count-non-blank-lines-of-code-in-bash
'it-source' 카테고리의 다른 글
Bash 스크립트에 전달된 인수 수 확인 (0) | 2023.04.26 |
---|---|
Azure 웹 작업이 여러 인스턴스에서 실행됩니까? (0) | 2023.04.26 |
WPF 명령 대 이벤트 장점/단점 (0) | 2023.04.26 |
UIView 무한 360도 회전 애니메이션? (0) | 2023.04.26 |
코드백에 정의된 바인딩 개체 (0) | 2023.04.26 |