簡體   English   中英

如何將命令的輸出分配到數組中?

[英]How do I assign the output of a command into an array?

我需要將grep的結果分配給一個數組......例如

grep -n "search term" file.txt | sed 's/:.*//'

這導致了一堆帶有行號的行,其中找到了搜索詞。

1
3
12
19

將它們分配給 bash 數組的最簡單方法是什么? 如果我只是將它們分配給一個變量,它們就會變成一個以空格分隔的字符串。

要將命令的輸出分配給數組,您需要在數組分配中使用命令替換。 對於一般命令command這看起來像:

arr=( $(command) )

在 OP 的示例中,這將顯示為:

arr=($(grep -n "search term" file.txt | sed 's/:.*//'))

內部$()運行命令,而外部()導致輸出為數組。 這樣做的問題是當命令的輸出包含空格時它將不起作用。 要處理此問題,您可以將IFS設置為\\n

IFS=$'\n' arr=($(grep -n "search term" file.txt | sed 's/:.*//'))

您還可以通過對數組的每個元素執行擴展來消除對 sed 的需要:

arr=($(grep -n "search term" file.txt))
arr=("${arr[@]%%:*}")

空格分隔的字符串在 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 $output | awk '{for(i=1;i<=NF;i++) print $i;}'

# convert to an array
ar=($output)
echo ${ar[3]} # echos 4th element

如果您正在考慮文件名中的空格,請使用find . -printf "\\"%p\\"\\n" find . -printf "\\"%p\\"\\n"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM