我正在尝试学习如何使用终端命令uniq
。我正在使用mac,bash shell(unix)。
这是我的文本文件“terminal.txt”:
this is a line
this is a line
this is a line
this is also a line
this is also a line
this is not a line
我在这里找到了一个使用uniq的例子http://www.computerhope.com/unix/uuniq.htm,所以这就是我打算使用命令的方法。我没有将我手动编写的文本复制到文本文件中。但是当我输入时:
uniq terminal.txt
我收到此错误消息:
uniq: terminal.txt: Illegal byte sequence
经过一些谷歌搜索后,我发现我应该在uniq:前写下LC_ALL = C.
LC_ALL=C uniq terminal.txt
但是当我输入这个时,我得到了这个输出:
??t
这不是正确的输出。我不知道我做错了什么,我也无法在谷歌上找到答案。
我有谁知道我做错了什么?
更新
这是od -c terminal.txt
:
0000000 377 376 t \0 h \0 i \0 s \0 \0 i \0 s \0
0000020 \0 a \0 \0 l \0 i \0 n \0 e \0 \0
0000040 \n \0 t \0 h \0 i \0 s \0 \0 i \0 s \0
0000060 \0 a \0 \0 l \0 i \0 n \0 e \0 \0
0000100 \n \0 t \0 h \0 i \0 s \0 \0 i \0 s \0
0000120 \0 a \0 \0 l \0 i \0 n \0 e \0 \n \0
0000140 \n \0 t \0 h \0 i \0 s \0 \0 i \0 s \0
0000160 \0 a \0 l \0 s \0 o \0 \0 a \0 \0
0000200 l \0 i \0 n \0 e \0 \0 \n \0 t \0 h \0
0000220 i \0 s \0 \0 i \0 s \0 \0 a \0 l \0
0000240 s \0 o \0 \0 a \0 \0 l \0 i \0 n \0
0000260 e \0 \0 \n \0 \n \0 t \0 h \0 i \0 s \0
0000300 \0 i \0 s \0 \0 n \0 o \0 t \0 \0
0000320 a \0 \0 l \0 i \0 n \0 e \0 \n \0
0000336
这是file terminal.txt
:
terminal.txt: Little-endian UTF-16 Unicode text
和cat terminal.txt
:
??this is a line
this is a line
this is a line
this is also a line
this is also a line
this is not a line
答案 0 :(得分:4)
您的文件采用UTF-16编码,uniq无法处理。
要将文件转换为UTF-8,请执行以下操作:
iconv -f utf-16 -t utf-8 terminal.txt > terminal2.txt
然后,uniq命令应该适用于新创建的文件。
为了解决这个问题,您应该努力了解您的编辑器设置并进行更改,以便将文件存储为UTF-8而不是UTF-16。
您可能还想熟悉可以在命令行上运行的简单编辑器,例如vi / vim,emacs或nano,尽管这些编辑器最初需要习惯。这些编辑器通常会创建简单的文本文件,这些文件不会出现用于创建文件的编辑器引起的问题。