在 Linux/Unix 系统中,统计文件代码行数有多种方法,以下是详细的 8 种方式及其适用场景:
1. wc -l
基础统计
wc -l filename.py
- 特点:最基础的行数统计
- 缺点:会统计空行和注释行
- 输出格式:
行数 文件名
2. 过滤空行后统计
grep -v '^$' filename.py | wc -l
- 作用:排除所有空行(
^$
表示空行) - 进阶版(排除以空格/制表符开头的空行):
grep -v '^[[:space:]]*$' filename.py | wc -l
3. 排除注释行(适用于特定语言)
Python 示例:
grep -v '^#' filename.py | grep -v '^$' | wc -l
C/Java 示例:
grep -v '^//' filename.cpp | grep -v '^/\*' | grep -v '^\*/' | grep -v '^$' | wc -l
4. 使用 cloc
专业工具
cloc filename.py
- 需要安装:
sudo apt install cloc
(Debian/Ubuntu) - 优点:
- 自动识别语言类型
- 分别统计代码/注释/空行
- 支持递归统计目录
5. awk
高级统计
awk '!/^$/ && !/^#/ {count++} END {print count}' filename.py
- 解释:
!/^$/
:非空行!/^#/
:非注释行(Python示例)count++
:计数器递增
6. sed
+ wc
组合
sed '/^$/d; /^#/d' filename.py | wc -l
- 解释:
/^$/d
:删除空行/^#/d
:删除注释行(可根据语言调整)
7. find
+ 递归统计
find . -name "*.py" -exec cat {} + | grep -v '^$' | wc -l
- 作用:统计当前目录所有Python文件的总行数
- 增强版(排除注释):
find . -name "*.py" -exec cat {} + | grep -v '^#' | grep -v '^$' | wc -l
8. pygount
(Python专用)
pygount filename.py
- 需要安装:
pip install pygount
- 优点:
- 精确识别Python代码/注释/空行
- 支持多种输出格式
各方法对比表
方法 | 空行处理 | 注释处理 | 多文件支持 | 语言识别 | 安装需求 |
---|---|---|---|---|---|
wc -l | ❌ 包含 | ❌ 包含 | 需配合find | ❌ 无 | 系统自带 |
grep -v | ✅ 可排除 | ✅ 需手动配置 | 需配合find | ❌ 无 | 系统自带 |
cloc | ✅ 单独统计 | ✅ 单独统计 | ✅ 支持 | ✅ 自动 | 需安装 |
awk | ✅ 可排除 | ✅ 可排除 | 需配合find | ❌ 无 | 系统自带 |
pygount | ✅ 单独统计 | ✅ 单独统计 | ✅ 支持 | ✅ Python专用 | 需pip安装 |
最佳实践建议
- 快速统计:用
wc -l
或grep -v '^$' | wc -l
- 精确统计:推荐
cloc
(跨语言)或pygount
(Python专用) - 代码审计:建议使用
cloc --by-file
生成分文件统计报告
示例报告生成:
cloc --by-file --exclude-dir=venv,node_modules --report-file=lines.txt .