[bash] 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는보고있는 파일의 확장자입니다. 확장자가 다른 파일은 무시됩니다.


답변

쉘 스크립트가 아닌 다른 것을 사용하려면 CLOC를 시도 하십시오 .

cloc는 많은 프로그래밍 언어에서 빈 줄, 주석 줄 및 소스 코드의 실제 줄을 계산합니다. 그것은 Perl v5.6 이상의 표준 배포판 (외부 모듈의 코드가 cloc에 내장되어 있음) 외부에 의존하지 않고 완전히 Perl로 작성되었으므로 이식성이 뛰어납니다.


답변

공통 쉘 유틸리티를 사용하여이를 수행하는 많은 방법이 있습니다.

내 해결책은 다음과 같습니다.

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

이것은 <file>에서 줄과 일치하지 않는 (-v) 줄을 검색합니다. ‘^ \ 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 *’는 0 이상의 공백 문자입니다. ‘$’는 행의 끝입니다. * .py는 계산하려는 모든 파일 (현재 dir의 모든 python 파일) 파이프 출력을 wc로 보냅니다. 나가.

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


답변

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


답변

cat file.txt | awk 'NF' | wc -l