вывод grep в массив - PullRequest
       34

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

10 голосов
/ 24 августа 2011

Ребята Как мне сделать эту работу

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

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

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

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

Ответы [ 5 ]

20 голосов
/ 24 августа 2011

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

X=( $(find /xyz/abc/music/ | grep def) )
echo ${X[1]}
echo ${X[2]}
echo ${X[3]}
echo ${X[4]}
10 голосов
/ 24 августа 2011

Если вам нужен только первый элемент (или, скорее, строка), вы можете использовать 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`
5 голосов
/ 30 января 2014

Даже если немного поздно, лучшим решением должен быть ответ от Рэя, но вам придется перезаписать переменную среды по умолчанию для разделения полей 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}


Надеюсь, это поможет

1 голос
/ 13 мая 2014

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

array_name=(`find directorypath | grep "string" | awk -F "\n" '{print $1}'`)
echo $array_name
0 голосов
/ 25 августа 2011

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

find /xyz/abc/music/ |grep def|head 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...