عدد أسطر التعليمات البرمجية (غير الفارغة) في bash

StackOverflow https://stackoverflow.com/questions/114814

سؤال

في 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 هي امتدادات الملفات التي يتم النظر فيها.يتم تجاهل أي ملفات ذات امتداد مختلف.

إذا كنت تريد استخدام شيء آخر غير برنامج Shell النصي، فجرّب كلوك:

يعتبر CLOC أسطر فارغة وخطوط التعليقات والخطوط الفعلية لرمز المصدر في العديد من لغات البرمجة.تتم كتابتها بالكامل في Perl مع عدم وجود تبعيات خارج التوزيع القياسي لـ Perl v5.6 وأعلى (يتم تضمين الكود من بعض الوحدات الخارجية داخل CLOC) وبالتالي فهو محمول تمامًا.

هناك العديد من الطرق للقيام بذلك، باستخدام أدوات Shell المساعدة الشائعة.

الحل الخاص بي هو:

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

يبحث هذا عن الأسطر في <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 *" جميع الملفات التي ترغب في حسابها (جميع ملفات Python في DIR) إخراج الأنابيب إلى WC.قبالة تذهب.

أنا أجيب على سؤالي (الحقيقي).تعذر العثور على إدخال تدفق المكدس الذي يغطي هذا.

يقوم هذا الأمر بحساب عدد الأسطر غير الفارغة.
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

يعطي عددًا إجماليًا لجميع الملفات الموجودة في الدليل الحالي وأدلته الفرعية.

هث!

وهذا يعطي عدد الأسطر دون حساب الأسطر الفارغة:

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

يعطي عدد الأسطر غير الفارغة في دليل العمل الحالي.

يوجد بالفعل برنامج لهذا على Linux يسمى "wc".

فقط

wc -l *.c 

ويعطيك إجمالي الأسطر والأسطر لكل ملف.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top