вывод 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`
Поместите вызов find в скобки массива
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 $1}'`) echo $array_name
Comments