仅从“loc”(代码行)命令中获取总数

仅从“loc”(代码行)命令中获取总数

我有一个 GitHub 存储库,我想在其中显示项目的代码行。因此,我找到了一个名为loc(lines of code)的工具这里。在该工具中,它输出如下代码行:

--------------------------------------------------------------------------------
Language             Files        Lines        Blank      Comment         Code
--------------------------------------------------------------------------------
C++                      1          567           29           22          516
C/C++ Header             2          245           12           15          218
--------------------------------------------------------------------------------
Total                    3          812           41           37          734
--------------------------------------------------------------------------------

有什么办法可以grep只显示代码列中的总计行吗?该命令的选项loc仅包括以下内容:

USAGE:
    loc [FLAGS] [OPTIONS] [target]...

FLAGS:
        --files      Show stats for individual files
    -h, --help       Prints help information
    -V, --version    Prints version information

OPTIONS:
        --exclude <REGEX>    Rust regex of files to exclude
        --include <REGEX>    Rust regex matching files to include. Anything not matched will be excluded
        --sort <COLUMN>      Column to sort by

ARGS:
    <target>...    File or directory to count

答案1

您可以使用 轻松完成此操作grep,但需要两个步骤:

  1. 过滤包含以下内容的行Total

    grep 'Total'
    
  2. 仅显示该行的最后一个数字(连续的数字):

    grep -Po '\d+$'
    

    -P切换到 PCRE 正则表达式模式,这是它理解\d“任何数字(0-9)”所必需的。
    -o告诉它只显示匹配的序列,而不是整行。
    $匹配行的末尾。

这些代码片段共同构成以下命令:

loc | grep 'Total' | grep -Po '\d+$'

如果我们假设您有一个包含如下行的纯文本文件:

该项目当前代码行数:123

$linecount您可以编辑此文件,并使用以下命令将此行中的数字替换为存储在 Bash 变量中的值sed。当然,您必须先将总行数存储在该变量中,如下所示:

linecount=$(loc | grep 'Total' | grep -Po '\d+$')

sed -i -E "s/(Current lines of code in this project: )[[:digit:]]+/\1$linecount/" README.MD

相关内容