grep输出到数组

new*_*ter 10 arrays bash grep

伙计我怎样才能做到这一点

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

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

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

echo $ {$(`find/xyz/abc/music/| grep def`)[0]}请帮帮我怎么做到这一点

Ray*_*oal 20

将调用放入数组括号中查找

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

  • 这是给我的.我已经看了很多关于将grep结果变成数组的问题,并且我发现"优雅"这个词在负面背景下显示出来是一个无法达到的标准......这实际上是一个解决方案的典范符合优雅的定义_and_在一行完成任务.大多数答案是"没有一个好方法可以做到这一点"..."很多迂回的方法......"谢谢!+1 (2认同)

Mic*_*bus 10

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

`find /xyz/abc/music/ |grep def | head -n 1`
Run Code Online (Sandbox Code Playgroud)

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

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

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

如果你关心整行而不是单词,你可以使用headtail执行此任务,如下所示:

`find /xyz/abc/music/ |grep def | head -n line_number | tail -n 1`
Run Code Online (Sandbox Code Playgroud)


小智 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}


希望这可以帮助