cat 命令似乎在每行末尾添加额外的 $ 字符

cat 命令似乎在每行末尾添加额外的 $ 字符

我正在尝试创建一个文件,看起来编辑器在每行末尾vi添加了一个。$我不知道是什么导致了这种情况,也不知道如何防止vi这种情况发生。

vi file.txt
12345
abcde

cat -v -e file.txt
12345$
abcde$

wc file.txt
2 2 12

我不想要那些$符号在最后;他们破坏了我的取决于字符数的自动化文件。为什么字数统计显示 12 个字符,而实际上每行有 5 个字符?

VIM 版本 7.4.629

答案1

@steeldriver 的评论是正确的:cat显示行结尾$vi如果你问得好,使用“:set list”)。每行额外的字符是换行符(每行文本末尾的不可见字符)。

如果您只想计算可打印文本,您可以在处理文件之前过滤文件wc,例如,使用tr选项-d。这是一个将自身作为示例的脚本:

#!/bin/sh
cat $0 |wc
cat $0 | tr -d '\r\n\t' | wc
cat $0 | tr -d '[:cntrl:]' |wc

尽管最后一行可能不够便携供您使用(它位于POSIX, 在里面扩展部分)。但根据原理中的线索,它可以在您可能使用的任何东西上运行。

相关内容