我需要从一个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