字符串变量中的第N个单词

Nic*_*oul 74 bash

在Bash中,我想通过变量获取字符串的第N个单词.

例如:

STRING="one two three four"
N=3
Run Code Online (Sandbox Code Playgroud)

结果:

"three"
Run Code Online (Sandbox Code Playgroud)

什么Bash命令/脚本可以做到这一点?

Ama*_*9MF 89

echo $STRING | cut -d " " -f $N
Run Code Online (Sandbox Code Playgroud)

  • 请求不存在的字段时,cut将失败。而不是返回“”,而是将返回字符串本身。示例:echo“ aaaa” | cut -f2结果为“ aaaa”,而不是空白的零长度结果。 (2认同)
  • @ajaaskel这似乎是在输入中找不到 _delimiter_ 时发生的。现在可以通过使用选项 --only-delimited 来改变这种行为。 (2认同)

aio*_*obe 57

替代

N=3
STRING="one two three four"

arr=($STRING)
echo ${arr[N-1]}
Run Code Online (Sandbox Code Playgroud)

  • 使用bash数组是"最好的"解决方案,我讨厌使用awk或sed,因为我没有看到它们安装在所有设置上,尤其是msys设置. (3认同)
  • 尽管 echo“不是必需的”,但我发现它对于理解如何使用 arr 元素很有用。谢谢 (2认同)
  • 如果您已将“IFS”(内部字段分隔符)设置为“:”或其他内容而不是空格,请在尝试此操作之前将其更改回来。 (2认同)
  • 这应该是正确的答案。使用数组来达到这个目的既简单又聪明。 (2认同)

jks*_*hah 28

运用 awk

echo $STRING | awk -v N=$N '{print $N}'
Run Code Online (Sandbox Code Playgroud)

测试

% N=3
% STRING="one two three four"
% echo $STRING | awk -v N=$N '{print $N}'
three
Run Code Online (Sandbox Code Playgroud)

  • +1这适用于多空格分隔符. (6认同)

小智 6

包含一些语句的文件:

cat test.txt
Run Code Online (Sandbox Code Playgroud)

结果:

This is the 1st Statement
This is the 2nd Statement
This is the 3rd Statement
This is the 4th Statement
This is the 5th Statement
Run Code Online (Sandbox Code Playgroud)

因此,要打印此语句类型的第四个单词:

cat test.txt |awk '{print $4}'
Run Code Online (Sandbox Code Playgroud)

输出:

1st
2nd
3rd
4th
5th
Run Code Online (Sandbox Code Playgroud)

  • OP表示该字符串位于变量中,而不是文件中。 (2认同)