Agarrando somente o número total do comando 'loc' (linhas de código)

3

Então, eu tenho um repositório do GitHub no qual quero exibir as linhas de código do projeto. Então, eu encontrei uma ferramenta chamada loc (linhas de código) aqui . Na ferramenta, ele gera as linhas de código da seguinte forma:

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

Existe alguma maneira pela qual eu poderia grep apenas a linha Total na coluna Código? As opções para o comando loc consistem apenas em:

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
    
por Owen Hines 01.02.2017 / 18:09

1 resposta

2

Você pode fazer isso facilmente com grep , mas precisa de duas etapas:

  1. Filtre a linha que contém Total :

    grep 'Total'
    
  2. Exibir apenas o último número (dígitos consecutivos) dessa linha:

    grep -Po '\d+$'
    

    -P alterna para o modo regex do PCRE, o que é necessário para que ele entenda que \d significa "qualquer dígito (0-9)".% -o diz para exibir somente a sequência correspondente, não a linha inteira.
    $ corresponde ao fim da linha.

Juntos, esses snippets formam o comando abaixo:

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

Se assumirmos que você tem um arquivo de texto simples contendo uma linha como esta:

  

Linhas de código atuais neste projeto: 123

Você pode editar este arquivo e substituir o número nesta linha pelo valor armazenado na variável de bash $linecount usando o comando sed abaixo. É claro que você deve armazenar a contagem total de linhas nessa variável primeiro, assim:

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

sed -i -E "s/(Current lines of code in this project: )[[:digit:]]+/$linecount/" README.MD
    
por Byte Commander 01.02.2017 / 18:30