Linux wc 命令可以做 3 件令人惊讶的事情
Linux wc
命令可计算文件的字数、行数、字符数或字节数。它不仅仅是一个文字处理实用程序,wc
还是执行各种系统任务的有用工具。
对于基本使用,您只需要一个包含一些文本的文件。这是我针对僵尸末日的计划:
$ wc zombie-apocalypse_plan-A.txt
188 581 3591 zombie-apocalypse_plan-A.txt
的默认输出wc
是文件的行数、单词数和字符数,后跟其路径。(我的计划中只有 188 行文本,所以可能是时候制定 B 计划了。)
以下是您可能不知道可以用该wc
命令执行的三件事。
1. 使用 wc 统计目录中的项目数
许多桌面文件管理器提供目录中项目总数。
终端不会这样做。至少默认情况下不会。
-1
(list) 的(即数字1,而不是小写的 L) 选项强制ls
命令 ls
在单列中列出文件。将输出wc
通过管道传输到其--lines
用于计数项目的选项:
$ ls -1 ~/Code/Angband-4.2.3 | wc --lines
25
需要注意几点。我为命令设置了别名ls
以包含--almost-all
选项,从而从目录列表中省略.
和条目。我还设置为忽略以或结尾的文件,这两个文件通常用作备份文件的扩展名。最后,默认情况下,我不查看隐藏文件。这意味着我对目录内容的报告不会偏离两个(和),但不会包含任何备份文件或隐藏文件。..
ls
~
#
.
..
这正是我想要的计数,但请记住这些条件,以防您想要不同的东西。该wc
命令会解析命令的输出ls
,因此即使您对它“撒谎”,它也会相信您。
2. 使用 wc 检测隐藏字符
我参与了一些使用XML工具链的项目,有时用户会提交有关文件的错误,而这些文件会破坏他们的流程。等到报告送到我手上时,这已经成了一个可以验证的谜团。人们运行 linters 来查找错误或配置错误,其他人检查了文件,但没有人能确定问题所在。
但是这个--char
选项wc
却显示出一些可疑的东西:
$ cat hidden.txt
ab
$ wc --char hidden.txt
5
大多数文件包含一些不可见的字符。例如,wc
将换行符视为有效的可数字符。但是,字符数 5 几乎不能解释末尾的单个换行符ab
(正确的计数是 3)。
实际上,如果您不知道在文件中的哪个位置查找这些隐藏字符,那么这种方法用处不大。毕竟,除非您手动计算可以看到多少个字符,否则报告文件有 758 个字符并没有什么用。但是,如果您的工具链提供了有关文件中发生问题的位置的错误,那么将文档中的某个部分复制并粘贴到命令中就很简单了wc
。
简而言之,使用wc
对于用户来说是一个简单的诊断步骤,并且使我免于向不习惯GNU Emacs 魔力的人解释Emacs 的 describe-char
功能。
作为记录,这里有一个修复的例子(问题是“软连字符”在用户的文本编辑器中不可见):
$ sed 's/\o302\xAD//' hidden.txt > fixed.txt
wc --char fixed.txt
3
3. 使用 wc 获取文件的大小
有很多方法可以获取文件的大小。du
当然有,和ls
(尽管ls -l
需要一些解析)。添加wc
到列表中。
$ wc --bytes ~/pixel.png
258 pixel.png
$ du --bytes ~/pixel.png
258 pixel.png
wc
我还没有遇到过有和 没有 的系统du
,但我遇到du
过不提供该选项的 实现--bytes
。到目前为止,该wc
命令在计数字节数方面一直保持一致(尽管在某些实现中,只有-c
短选项)。
$ du -h B ~/pixel.png
512B pixel.png
$ wc -c ~/pixel.png
258 pixel.png
依靠厕所
该wc
命令是一个简单的计数器。它没有任何特殊功能,也不是 Linux 的优秀之处的特别出色演示。但是,它是一个可靠且可预测的命令,可以完成一件事,并且做得很好。好好利用它吧。