2010-06-09 180 views
55

在Bash中,我想获取字符串的第N个字。字符串中的第N个字

例如:

STRING="one two three four" 
N=3 

结果:

"three" 

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

回答

68
echo $STRING | cut -d " " -f $N 
42

另一种

N=3 
STRING="one two three four" 

arr=($STRING) 
echo ${arr[N-1]} 
+2

为此,使用bash数组是“最好的”解决方案,我讨厌使用awk或sed,因为我没有看到它们安装在所有设置上,尤其是msys设置。 – Sundar 2015-11-02 19:27:31

+1

尽管回声“不是必须的”,但我发现它对于理解如何使用arr元素很有用。谢谢 – 2015-12-11 02:02:53

+0

如果您已将'IFS'(内部字段分隔符)设置为':'或其他空白区域,请在尝试此操作之前将其更改回去。 – Noumenon 2016-10-20 13:06:09

2
STRING=(one two three four) 
echo "${STRING[n]}" 
+1

在你的例子中,STRING真的是一个字符串吗?它看起来像一个数组。 – 2013-06-15 12:02:40

+0

@NicolasRaoul其实你是对的。但是我写了一个替代方案。 – mnrl 2013-06-15 18:00:25

21

使用awk

echo $STRING | awk -v N=$N '{print $N}' 

测试

% N=3 
% STRING="one two three four" 
% echo $STRING | awk -v N=$N '{print $N}' 
three 
+4

+1这适用于多空格分隔符。 – tidwall 2014-07-29 17:09:21

1

没有expen sive叉,没有管道,没有bashisms:

$ set -- $STRING 
$ eval echo \${$N} 
three 

但要小心globbing。

相关问题