вывод команды grep в массив

ребята, как я могу сделать эту работу

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

Я не хочу хранить массив в любой временной переменной. Как мы можем напрямую работать с этим массивом.

Итак, чтобы получить 1-й элемент этого массива

echo ${$('find /xyz/abc/ music | / grep def`) [0]} Пожалуйста, помогите мне, как я могу достичь этого

5 ответов


Если вам просто нужен первый элемент (или, скорее, строка), вы можете использовать head:

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

Если вам нужен доступ к произвольным элементам, вы можете сначала сохранить массив, а затем получить элемент:

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

но это не будет помещать каждую строку вывода grep в отдельный элемент массива.

если вы заботитесь о целых строк вместо слов, вы можете использовать head и tail для этой задачи, вот так:

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

поместите вызов для поиска в скобки массива

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

хотя немного поздно, лучшим решением должен быть ответ от Ray, но вам придется перезаписать переменную среды разделителя полей по умолчанию IFS в newline для принятия полных строк в качестве поля массива. После заполнения массива вы должны переключить IFS обратно на исходное значение. Я расширю решение лучей:



    # 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}


надеюсь, что это помогает


это будет работать

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

вы хотите получить первую строку вывода?

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