grep输出到数组

时间:2011-08-24 17:58:28

标签: arrays bash grep

伙计我怎样才能完成这项工作

  

`find / xyz / abc / music / | grep def`

我不想将数组存储在任何临时变量中。我们怎样才能直接对这个阵列进行操作。

所以要获得该数组的第一个元素

  

echo $ {$(`find / xyz / abc / music / | grep def`)[0]}   请帮帮我如何实现这个目标

5 个答案:

答案 0 :(得分:20)

将调用放入数组括号中

X=( $(find /xyz/abc/music/ | grep def) )
echo ${X[1]}
echo ${X[2]}
echo ${X[3]}
echo ${X[4]}

答案 1 :(得分:10)

如果您只需要第一个元素(或更确切地说是行),则可以使用head

`find /xyz/abc/music/ |grep def | head -n 1`

如果需要访问任意元素,可以先存储数组,然后检索元素:

arr=(`find /xyz/abc/music/ |grep def`)
echo ${arr[n]}

但这不会将每行grep输出放入数组的单独元素中。

如果您需要整行而不是单词,则可以使用headtail执行此任务,如下所示:

`find /xyz/abc/music/ |grep def | head -n line_number | tail -n 1`

答案 2 :(得分:5)

即使有点晚,最好的解决方案应该是Ray的答案,但是您必须将默认的字段分隔符环境变量IFS覆盖到换行符,以将完整的行作为数组字段。填充阵列后,应将IFS切换回原始值。我将扩展Rays解决方案:



    # keep original IFS Setting
    IFS_BAK=${IFS}
    # note the line break between the two quotes, do not add any whitespace, 
    # just press enter and close the quotes (escape sequence "\n" for newline won't do)
    IFS="
    "
    X=( $(find /xyz/abc/music/ | grep def) )
    echo ${X[1]}
    echo ${X[2]}
    echo ${X[3]}
    echo ${X[4]}
    # set IFS back to normal..
    IFS=${IFS_BAK}


希望这有帮助

答案 3 :(得分:1)

这将起作用

array_name=(`find directorypath | grep "string" | awk -F "\n" '{print $1}'`)
echo $array_name

答案 4 :(得分:0)

您的意思是获得输出的第一行吗?

find /xyz/abc/music/ |grep def|head 1