今天我注意到cut
命令中的一些东西,尽管我已经使用和使用它们很长时间了,但不知何故我以前从未注意到过。
/users/developer/
我想从字符串中提取users
。所以,我所做的是,
echo `pwd` | cut -d '/' -f1
这并没有给我带来任何回报。我的假设是,由于我已指定/
为分隔符,因此它应该在找到分隔符后返回我的第一个字段。
经过一番调整后,我意识到当我更改命令来检索时,我可以获得所需的输出f2
echo `pwd` | cut -d '/' -f2
这让我想到,分隔符总是期望某物位于它的左侧,这就是为什么在尝试检索第一个字段时,它没有返回任何内容,而当我尝试检索第二个字段时,我得到了我所期望的结果。
从逻辑上讲,对于 a 来说这是有道理的delimiter
。我只是想知道,这真的是 cut 命令中分隔符参数的工作原理吗?换句话说,我的推论是否正确(该分隔符总是期望某些东西位于分隔符的左侧)
答案1
f1
是空的,就像前面的 first 一样 /
。
echo "/some/path/to/some/location" | cut -d '/' -f1
|
+--- empty
f1
echo "
是和 first之间的内容/
。
换句话说:空并不是不存在。或者字符串/字段可以没有字符,如""
.
例如,如果您看一下这样的内容,可能会更清楚:
[In Data] [Output fields]
1 2 3 4 5 -f
A:B::D:E => A, B, , D, E
A::C:D:E => A, , C, D, E
:B:C:D: => , B, C, D,
左边,介于,或右 - 空或不空。场就是场。
答案2
页面中没有任何内容man
可以info
明确证实这一点,但是
-f, --fields=LIST
select only these fields; also print any line that contains no delimiter character, unless the -s option is specified
这表明第一个字段位于第一个分隔符之前(即使该分隔符实际上不存在)。
对我来说,我从来没有怀疑过它是这样工作的,但这可能不是你需要的答案;-)。
答案3
这个定义似乎很清楚。看着维基百科关于分隔符的文章。
分隔符是一个或多个字符的序列,用于指定纯文本或其他数据流中单独的、独立的区域之间的边界。1分隔符的一个示例是逗号字符,它充当逗号分隔值序列中的字段分隔符。
定界符代表指定数据流中边界的各种方法之一。例如,声明性表示法是一种替代方法,它在数据流开头使用长度字段来指定数据流包含的字符数。
它在第一句话中说,“......指定单独的、独立的区域之间的边界......”。我认为这意味着正如你所推断的那样。