如何将命令的输出分配给数组?
我需要从grep
分配结果到数组…例如
grep -n "search term" file.txt | sed 's/:.*//'
这导致了一堆行号,其中findsearch项。
1 3 12 19
将它们分配给bash数组最简单的方法是什么? 如果我简单地将它们分配给一个variables,它们将变成空格分隔的string。
要将输出分配给数组,您需要在数组赋值中使用命令replace。
arr=($(grep -n "search term" file.txt | sed 's/:.*//'))
内部$()运行命令,而外部()导致输出是一个数组。 这个问题是,它不会使用包含空格的文件。 要处理这个问题,您可以将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[@]%%:*}")
空格分隔的string很容易在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"
find . -printf "\"%p\"\n"