Bash 'cut' Mac 命令

Bash 'cut' command for Mac

我要剪切所有带分隔符“:”的内容 输入文件格式如下:

data1:data2
data11:data22
...

我有一个linux命令

cat merged.txt | cut -f1 -d ":" > output.txt

在 mac 终端上出现错误:

cut: stdin: Illegal byte sequence

在 mac 终端上执行此操作的正确方法是什么?

你的 cut 命令在我的 Mac 上对我有用,你可以试试 awk 得到同样的结果

awk -F: '{print }' merged.txt

data1
data11

您的输入文件 (merged.txt) 可能包含 bytes/byte 个在您当前的语言环境中无效的序列。例如,您的语言环境可能指定 UTF-8 字符编码,但文件采用其他编码,无法解析为有效的 UTF-8。如果这是问题所在,您可以通过告诉 tr 假定 "C" 语言环境来解决它,这基本上告诉它将输入作为字节流处理而不注意编码。

顺便说一句,cat file | 就是通常所说的 Cat 无用使用 (UUOC)——您可以只使用标准输入重定向 < file,这样更干净、更高效。因此,我的命令版本为:

LC_ALL=C cut -f1 -d ":" < merged.txt > output.txt

请注意,由于 LC_ALL=C 赋值是 tr 命令的前缀,它仅适用于该命令,不会混淆 应该 假定为 UTF-8(或任何您的正常语言环境)。