我需要從一個grep
結果分配給數組...例如如何將命令的輸出分配給數組?
grep -n "search term" file.txt | sed 's/:.*//'
這導致一串與行號線在其中找到搜索術語的。
1
3
12
19
將它們分配給bash數組最簡單的方法是什麼?如果我簡單地將它們分配給一個變量,它們將變成空格分隔的字符串。
我需要從一個grep
結果分配給數組...例如如何將命令的輸出分配給數組?
grep -n "search term" file.txt | sed 's/:.*//'
這導致一串與行號線在其中找到搜索術語的。
1
3
12
19
將它們分配給bash數組最簡單的方法是什麼?如果我簡單地將它們分配給一個變量,它們將變成空格分隔的字符串。
思維空間要輸出分配到一個數組,你需要使用一個數組賦值的內部命令替換。
arr=($(grep -n "search term" file.txt | sed 's/:.*//'))
內部$()運行命令,而outer()則導致輸出爲數組。這個問題在於它不適用於包含空格的文件。要處理這個問題,您可以將IFS設置爲\ n。
IFS=$'\n'
arr=($(grep -n "search term" file.txt | sed 's/:.*//'))
unset IFS
還可以切出需要由陣列中的每個元素進行擴展的sed:
arr=($(grep -n "search term" file.txt))
arr=("${arr[@]%%:*}")
加上一個用於處理元素中空白的情況。正是我在找什麼。 – 2015-04-02 17:22:15
IFS的東西太棒了!一直在尋找小時! – Drutten 2016-08-12 12:09:05
這真棒,正是我所需要的! – 2017-07-26 21:42:06
空格分隔的字符串很容易在bash中穿過。
# save the ouput
output=$(grep -n "search term" file.txt | sed 's/:.*//')
# iterating by for.
for x in $output; do echo $x; done;
# awk
echo $out | awk '{for(i=1;i<=NF;i++) print $i;}'
# convert to an array
ar=($out)
echo ${ar[3]} # echos 4th element
如果您在文件名使用find . -printf "\"%p\"\n"
但破損的文件與空間。 – jordanm 2012-02-26 01:01:45
@jordanm使用'find。 -printf「\」%p \「\ n」' – 2012-02-26 01:17:45
謝謝!順便說一句,我認爲你錯過了在$輸出做$ echo $ x的分號?完成;' – 2012-02-26 05:40:17
見[這個問題](http://stackoverflow.com/questions/971162/how-to-initialize -bash-array-with-output-piped-from-another-command) – beerbajay 2012-02-26 00:40:13
空格分隔的字符串在bash中很容易遍歷。 – 2012-02-26 00:42:08
哦...應該更徹底地搜索。謝謝。 – 2012-02-26 00:46:02