count (non-blank) lines-of-code in bash

前端 未结 19 1439
耶瑟儿~
耶瑟儿~ 2020-12-07 07:14

In Bash, how do I count the number of non-blank lines of code in a project?

相关标签:
19条回答
  • 2020-12-07 08:10

    There are many ways to do this, using common shell utilities.

    My solution is:

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

    This searches for lines in <file> the do not match (-v) lines that match the pattern (-e) '^\s*$', which is the beginning of a line, followed by 0 or more whitespace characters, followed by the end of a line (ie. no content other then whitespace), and display a count of matching lines (-c) instead of the matching lines themselves.

    An advantage of this method over methods that involve piping into wc, is that you can specify multiple files and get a separate count for each file:

    $ grep -cve '^\s*$' *.hh
    
    config.hh:36
    exceptions.hh:48
    layer.hh:52
    main.hh:39
    
    0 讨论(0)
  • 2020-12-07 08:11

    The neatest command is

    grep -vc ^$ fileName
    

    with -c option, you don't even need wc -l

    0 讨论(0)
  • 2020-12-07 08:11
    grep -v '^\W*$' `find -type f` | grep -c '.' > /path/to/lineCountFile.txt
    

    gives an aggregate count for all files in the current directory and its subdirectories.

    HTH!

    0 讨论(0)
  • 2020-12-07 08:11
    rgrep . | wc -l
    

    gives the count of non blank lines in the current working directory.

    0 讨论(0)
  • 2020-12-07 08:12

    Here's a Bash script that counts the lines of code in a project. It traverses a source tree recursively, and it excludes blank lines and single line comments that use "//".

    # $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
    

    Here's what the output looks like for my project:

    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
    

    Enjoy! --Curran

    0 讨论(0)
  • 2020-12-07 08:16
    #!/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
    

    The above will give you the total count of lines of code (blank lines removed) for a project (current folder and all subfolders recursively).

    In the above "./blog" "./punbb" "./js/3rdparty" and "./pma" are folders I blacklist as I didn't write the code in them. Also .php, .as, .sql, .css, .js are the extensions of the files being looked at. Any files with a different extension are ignored.

    0 讨论(0)
提交回复
热议问题