我有一个 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
,但需要两个步骤:
过滤包含以下内容的行
Total
:grep 'Total'
仅显示该行的最后一个数字(连续的数字):
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