为什么 wc -l 告诉我这个非空文件有 0 行?

为什么 wc -l 告诉我这个非空文件有 0 行?

xclip/xsel是允许您执行以下操作的实用程序管道剪贴板输出到 Ubuntu 上的 shell。不幸的是,它们与命令的结合似乎失败了wc

尝试这个。打开一个新文件并输入:

this is a line

无需在行尾按回车键

现在,复制此文本并尝试以下操作:

$ xsel -o | wc -l
0

输出是 0,而实际上它应该是 1。保存文件(称之为myfile.txt)。

现在尝试:

$ cat myfile.txt | wc -l
1

正如预期的那样,输出为 1。

为什么第一种情况输出为0?

答案1

您遇到的问题是wc -l计算新行。由于您实际上尚未输入,因此\n实际上有零个新行。

摘自wc手册页

打印每个 FILE 的换行符、字数和字节数,如果指定了多个 FILE,则打印总行数。没有 FILE 或 FILE 为 - 时,读取标准输入。单词是由空格分隔的非零长度字符序列。

如果你改变它以便wc计算字符数 ( -c),你会发现它实际上工作得很好并且可以计算字符数:

$ xsel -o | wc -c
14

将其保存到文件中会产生在文件末尾添加换行符的效果。

答案2

wc计算行尾字符。第一次您只是标记文本,不包含任何行尾字符。保存文件时,编辑器会附加一个行尾字符,该字符按 计数wc

相关内容