这是查找我编写的代码行数的命令?

这是查找我编写的代码行数的命令?
find . -type f -name '*.c' -exec cat {} \; | sed '/^\s*#/d;/^\s*$/d;/^\s*\/\//d' | wc -l

谁能解释一下其中的含义吗?

答案1

解释

find . -type f -name '*.c'- 以递归方式查找当前目录中名称和.c扩展名中含有任意符号的所有文件。请参阅man find

-exec cat {} \;- 获取上一步中找到的文件的内容。请参阅 -exec 构造:-exec command {} +

sed '/^\s*#/d;/^\s*$/d;/^\s*///d'- 删除几种类型的“评论”(或类似的内容)。本部分包含 3 个部分,其中;.在哪里:

  1. /^\s*#/d- 行首 ( ^)、0、1 或多个空格 ( \s*) 和#符号。//d- 删除匹配的字符串;
  2. /^\s*$/d- 空行。与上一部分相同,但带有$表示行尾的符号
  3. /^\s*\/\//d- 匹配带有两个斜杠(\/\/, \- 反斜杠以引用斜杠)且前面有 0,1 个或多个空格的行

wc -l- 计算代码行数

答案2

find . -type f -name '*.c'

查找任何以 .c 结尾的文件

-exec cat {} \;

运行cat命令来打印文件(这实际上是无意义的:文件名可以作为参数直接传递给sed而不是通过管道传递)

| sed '/^\s*#/d;/^\s*$/d;/^\s*\/\//d'

从文件中删除任何预处理器指令、空行和注释(您可以通过| wc -l从命令中删除该部分来查看不带注释的文件)

| wc -l

统计过滤掉评论后显示的总行数。

答案3

解释一下意思?好的。我认为这意味着有人喜欢在命令之间通过管道传输标准输出。

我认为整个事情可以用一个简单的替代

find . -type f -name '*.c' -exec grep -cv -e '^\s*#' -e '^\s*$' -e '^\s*//' {} \;

相关内容