如果分隔符是多个空格,则使用 cut 时进行分词

Zos*_*Zos 5 bash debian cut

我正在运行 bash 脚本,执行以下操作:

cut -d ' ' -f2 <<< "aaa bbb"
Run Code Online (Sandbox Code Playgroud)

得到结果:

bbb
Run Code Online (Sandbox Code Playgroud)

如果有多个空格作为分隔符(假设是三个):

cut -d ' ' -f2 <<< "aaa   bbb"
Run Code Online (Sandbox Code Playgroud)

结果是:

 bbb
Run Code Online (Sandbox Code Playgroud)

这是在 debian 8 下运行的。

现在,在 debian 10 下运行的相同脚本会产生不同的输出:

如果有多个空格作为分隔符(假设是三个):

cut -d ' ' -f2 <<< "aaa   bbb"
Run Code Online (Sandbox Code Playgroud)

结果是“”,只是一个空格。

我希望在 debian 8 中具有与 debian 10 相同的行为。有什么想法吗?

(我知道,我可以使用 tr -s 并去掉三个空格,但我想了解为什么会有不同的行为)。

最好的问候,佐斯

ilk*_*chu 3

cut我认为最近的行为不应该发生这样的改变。我也无法使用 Debian 8.11 和cutGNU coreutils 8.23 重现该情况。

但是,如果您给出cut参数-f 2-,并带有尾随破折号,您将获得从字段 2 开始的所有字段。我认为这与您所描述的非常匹配:

$ cut -d ' ' -f2- <<< "aaa   bbb"
  bbb
Run Code Online (Sandbox Code Playgroud)

请注意,输出中有两个前导空格,它们是字段 2(空)、3(空)和 4 ( bbb) 之间的字段分隔符。你的问题中有一个前导空格,但我不知道这是否是故意的。