вывод команды 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