您如何为 "cut" 命令使用 -z 选项?
How exacly do you use the -z option for the "cut" command?
在文档中它说 -z
选项将默认行定界符(换行符)更改为 ASCII NUL。您究竟如何使用该选项?请看看这个例子(文件是制表符分隔的):
$ cat data.tsv
John Doe 28 New York
Bob Smith 37 Boston
Jane Doe 31 Boston
$
$ cut -f1,3 data.tsv
John Doe New York
Bob Smith Boston
Jane Doe Boston
$
$ # This is the output I get:
$ cut -f1,3 -z data.tsv
John Doe New York
Bob Smith$
我无法理解该输出。那里到底发生了什么?
-z
适用于当您的 输入 是 NUL 分隔而不是 \n
分隔时。它改变了 cut
处理输入的方式,并使其以相同的格式输出记录,具有 [=15=]
行结尾。
您现在输入的数据是:
John Doe 28 New York\nBob Smith 37 Boston\nJane Doe 31 Boston\n
如果它有 NUL 而不是换行符,你会使用 -z
:
John Doe 28 New York[=11=]Bob Smith 37 Boston[=11=]Jane Doe 31 Boston[=11=]
这什么时候有用?它不是用于文件,而是用于管道。例如,您可以使用 find -print0
输出每个名称后带有 [=15=]
的文件名。 find -print0
允许您处理带有嵌入换行符的文件名——这是非常不寻常的,但换行符是文件名中的合法字符。 [=15=]
永远不合法。
那么cut -z
就有用了。
其他命令中的类似标志包括 xargs -0
、read -d ''
和 cpio -0
。
ASCII NULL
字符实际上是文件结尾。您的输入文件实际包含:
John Doe\t28\tNew York\n
Bob Smith\t37\tBoston\n
Jane Doe\t31\tBoston\n
[=10=]
(\n
是新行,[=13=]
是 ASCII NULL
,\t
是制表符)。
如果您的行分隔符是文件结尾,那么第一个字段将是 "John Doe"(这是您所期望的),第三个字段是“New York\nBob Smith
”。 \n
在这里不是字段分隔符,因此该字段运行到下一个选项卡。
在文档中它说 -z
选项将默认行定界符(换行符)更改为 ASCII NUL。您究竟如何使用该选项?请看看这个例子(文件是制表符分隔的):
$ cat data.tsv
John Doe 28 New York
Bob Smith 37 Boston
Jane Doe 31 Boston
$
$ cut -f1,3 data.tsv
John Doe New York
Bob Smith Boston
Jane Doe Boston
$
$ # This is the output I get:
$ cut -f1,3 -z data.tsv
John Doe New York
Bob Smith$
我无法理解该输出。那里到底发生了什么?
-z
适用于当您的 输入 是 NUL 分隔而不是 \n
分隔时。它改变了 cut
处理输入的方式,并使其以相同的格式输出记录,具有 [=15=]
行结尾。
您现在输入的数据是:
John Doe 28 New York\nBob Smith 37 Boston\nJane Doe 31 Boston\n
如果它有 NUL 而不是换行符,你会使用 -z
:
John Doe 28 New York[=11=]Bob Smith 37 Boston[=11=]Jane Doe 31 Boston[=11=]
这什么时候有用?它不是用于文件,而是用于管道。例如,您可以使用 find -print0
输出每个名称后带有 [=15=]
的文件名。 find -print0
允许您处理带有嵌入换行符的文件名——这是非常不寻常的,但换行符是文件名中的合法字符。 [=15=]
永远不合法。
那么cut -z
就有用了。
其他命令中的类似标志包括 xargs -0
、read -d ''
和 cpio -0
。
ASCII NULL
字符实际上是文件结尾。您的输入文件实际包含:
John Doe\t28\tNew York\n
Bob Smith\t37\tBoston\n
Jane Doe\t31\tBoston\n
[=10=]
(\n
是新行,[=13=]
是 ASCII NULL
,\t
是制表符)。
如果您的行分隔符是文件结尾,那么第一个字段将是 "John Doe"(这是您所期望的),第三个字段是“New York\nBob Smith
”。 \n
在这里不是字段分隔符,因此该字段运行到下一个选项卡。