我需要将grep
的结果赋值给一个数组...例如
grep -n "search term" file.txt | sed 's/:.*//'
这导致了一串带有行号的行,在这些行中找到了搜索词。
1
3
12
19
将它们分配给bash数组的最简单方法是什么?如果我简单地将它们赋给一个变量,它们就会变成一个空格分隔的字符串。
发布于 2012-02-26 09:07:26
要将命令的输出赋值给数组,需要在数组赋值中使用命令替换。对于通用命令command
,如下所示:
arr=( $(command) )
在该操作的示例中,这将是:
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[@]%%:*}")
发布于 2012-02-26 08:45:36
在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"
https://stackoverflow.com/questions/9449417
复制相似问题