【问题标题】:Cut is working unexpected? [duplicate]剪切工作出乎意料? [复制]
【发布时间】:2014-10-02 07:55:09
【问题描述】:

我想用自定义分隔符将一条线切割成字段:

echo "field1   field2    field3" | cut -d\  -f2

我希望field2 会显示在结果中,但我什么也没得到。如何用cut拆分?

【问题讨论】:

标签: bash cut


【解决方案1】:

问题是,空间不止一个。 cut(1) 不会折叠分隔符。它将在遇到的第一个分隔符处拆分。

POSIX 有话要说(强调我的):

  • -f 列表
    根据字段列表剪切,假定在文件中由分隔符分隔(请参阅 -d)。应输出每个选定的字段。 输出字段应由单个出现的字段分隔符分隔。 没有字段分隔符的行应完整传递,除非指定了 -s。选择输入行中不存在的字段应该不会出错。

解决方案:

  1. 如果您使用的是 FreeBSD,请使用 -w;这将在空白处拆分(虽然非常有用,但这是非标准的;并且可移植到 GNU cut)
  2. 使用-f 4
  3. 使用awk(1):echo "field1 field2 field3" | awk '{print $2}'
  4. 使用tr(1) 将所有空格折叠成一个空格:echo "field1 field2 field3" | tr -s \ | cut -d\ -f2

【讨论】:

【解决方案2】:

你可以使用awk:

echo "field1   field2    field3" | awk '{print $2}'
field2

因为cut 不能正确处理多个分隔符。

或者使用tr将多个空格先截断为一个:

echo "field1   field2    field3" | tr -s ' ' | cut -d ' ' -f2
field2

【讨论】:

    猜你喜欢
    • 2013-05-02
    • 2020-04-12
    • 1970-01-01
    • 2019-03-25
    • 1970-01-01
    • 1970-01-01
    • 2014-09-11
    • 2013-07-15
    • 1970-01-01
    相关资源
    最近更新 更多