2010-06-09 243 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。

相關問題