文件查看编辑命令 wc
wc 是 Linux 里一个简单又好用的命令,全称是 word count,主要用来统计文件的行数、字数、字节数等信息。
1. 基本用法
wc
最简单的用法就是直接跟上文件名,它会返回文件的 行数、字数、字符数 和 文件名。比如你有个文件 example.txt
,内容是:
Hello world
This is a test
跑这个命令:
wc example.txt
输出会是:
2 5 22 example.txt
这行输出啥意思呢?
2
:行数(lines),文件有 2 行。5
:字数(words),按空格或换行分隔的单词数。22
:字符数(characters),包括空格和换行符。example.txt
:文件名。
简单直接,啥都不用记,丢个文件名就行。
2. 指定统计类型 -l、-w、-c、-m
如果不想看所有统计数据,可以用选项只挑你想要的:
-l
:只统计行数。-w
:只统计字数。-c
:只统计字节数。-m
:只统计字符数(和-c
差不多,但考虑多字节字符时有区别)。
比如,只想看 example.txt
的行数:
wc -l example.txt
输出:
2 example.txt
想看字数:
wc -w example.txt
输出:
5 example.txt
字节数和字符数类似,但如果文件有非 ASCII 字符(比如中文),-m
和 -c
可能会有不同结果。假设有个文件 chinese.txt
,内容是:
你好 世界
执行:
wc -c chinese.txt
wc -m chinese.txt
输出可能是:
10 chinese.txt # 字节数,UTF-8 编码下每个中文字符占 3 字节
6 chinese.txt # 字符数,算上空格和换行
这些选项可以组合用,比如 -lw
一起统计行数和字数:
wc -lw example.txt
输出:
2 5 example.txt
3. 处理多个文件
wc
可以一次处理多个文件,统计结果会逐个列出,最后还有个总计。比如有 file1.txt
和 file2.txt
:
wc file1.txt file2.txt
输出可能是:
2 5 22 file1.txt
3 8 35 file2.txt
5 13 57 total
total
那一行是所有文件的统计总和。想只看某些数据,比如行数:
wc -l file1.txt file2.txt
输出:
2 file1.txt
3 file2.txt
5 total
4. 从标准输入读取数据
wc
不一定非要跟文件,它还能从标准输入(stdin)读取数据。比如用管道把内容丢给 wc
:
echo -e "Hello\nWorld" | wc
输出:
2 2 12
这里没有文件名,因为数据来自管道。-e
是让 echo
识别换行符 \n
。你也可以用其他命令的输出,比如统计 ls
的文件数:
ls | wc -l
这会告诉你当前目录有多少文件或目录。
5. 统计最长行的字符数:-L
想知道文件里最长的一行有多少字符?用 -L
选项。比如 example.txt
内容是:
Hello
This is a test
World
执行:
wc -L example.txt
输出:
13 example.txt
13
是最长行(This is a test
)的字符数,包括空格。不常用,但分析文本结构时可能有帮助。
6. 处理非标准编码:-m 和字符集
前面提过,-c
统计字节数,-m
统计字符数。在处理非 ASCII 文件(比如中文、日文)时,-m
更准确。比如文件 unicode.txt
内容是:
你好
世界
用:
wc -m unicode.txt
wc -c unicode.txt
输出:
5 unicode.txt # 字符数:4 个中文字符 + 1 个换行
14 unicode.txt # 字节数:每个中文 3 字节 + 换行
如果你的终端或文件用的是非 UTF-8 编码,注意检查环境变量 LC_ALL
或 LANG
,可能影响结果。
7. 实际场景:脚本里的用法
wc
在脚本里特别好用。比如,检查文件是否为空:
if [ $(wc -l < example.txt) -eq 0 ]; then
echo "文件是空的"
else
echo "文件有内容"
fi
注意这里用 <
重定向,避免输出文件名。或者统计目录下特定文件的行数总和:
find . -name "*.txt" | xargs wc -l
xargs
把 find
的结果传给 wc
,统计所有 .txt
文件的行数。
8. 注意事项和常见问题
- 空文件:空文件跑
wc
会返回0 0 0 文件名
。 - 大文件:
wc
处理大文件很快,因为它只扫描一遍,不用担心性能。 - 换行符差异:Windows 文件可能有
\r\n
,Linux 是\n
,可能影响行数或字符数统计,转换格式(用dos2unix
)可能有帮助。