Как сохранить каждую отдельную строку в текстовом файле в массив?

У меня есть файл под названием «threewords». Он содержит информацию:

\#gray speedy bee gr-A | sp-EdE | bE \#gray greedy pea gr-A | gr-EdE | pE 

Когда я запускаю команду:

 cat threewords | grep ^# | cut -c2- 

Команда вытягивает две строки, начинающиеся с #. Затем он удаляет # и возвращает это как вывод:

 gray speedy bee gray greedy pea 

Когда я выполняю свою команду:

 array=($(cat threewords | grep ^# | cut -c2-)) 

Он создает массив, но он разделяет все слова на отдельные позиции массива следующим образом:

 array[0] = gray, array[1] = speedy, array[2] = bee, array[3] = gray, array[4] = greedy, array[5] = pea 

Я могу вычислить код, чтобы он помещал вывод каждой строки в массив следующим образом:

 array[0] = gray speedy bee, array[1] = gray greedy pea 

2 Solutions collect form web for “Как сохранить каждую отдельную строку в текстовом файле в массив?”

Разделение выполняется с IFS как разделителем (который по умолчанию содержит пробел, новую строку и вкладку). Установите IFS только в новую строку:

 $ IFS=$'\n' a=($(printf "1 2\n2 3\n")) $ echo ${a[0]} 1 2 $ echo ${a[1]} 2 3 

Это изменит IFS для оболочки, поэтому лучше всего сохранить ее и восстановить:

 OLD_IFS="$IFS" IFS=$'\n' array=($(grep '^#' threewords | cut -c2-)) IFS="$OLD_IFS" 

И нет абсолютно никаких оснований:

 cat threewords | grep '^#' 

grep отлично умеет читать файлы:

 grep '^#' threewords 

Как отмечает Стефан , при обработке вывода команды для дальнейшего расширения оболочки следует отключить глобальное использование с помощью set -f :

 $ help set ... -f Disable file name generation (globbing). 

В противном случае:

 $ cd /; a=( $(printf "*\n") ) $ echo ${a[@]} bin boot cdrom dev etc home ... 

Если у вас есть bash 4

 mapfile -t array < <(grep ^# threewords | cut -c2-) 

Будет заполнять array , по одной строке на элемент

 printf "%s\n" "${array[@]}" gray speedy bee gray greedy pea 
  • Надежная перезапись части диска
  • UNIX - команда разбивать файл на несколько файлов со всеми строками для каждых 3 уникальных значений в столбце
  • Можно ли очистить env var во время завершения bash?
  • Шаблон Грепа в ksh
  • Как мне сделать grep список совпадений перед именем файла?
  • pgrep для процессов, которые не связаны с терминалом в ubuntu
  • Как проверить, какие строки из файла A отсутствуют в файле B, не отображая ничего, что присутствует в файле B, а не в файле A?
  • Как использовать grep, когда файл не содержит строку
  • Заменить поля в файле inline
  • Как извлечь XML из текстового файла
  • как выполнять строки, исходящие из результата grep?
  • Interesting Posts

    В чем разница между readelf и eu-readelf?

    Как мы можем сохранить вывод команды в виде массива в сценарии оболочки Unix?

    Yum update / install для любого пакета дает мне следующую ошибку. Какие действия я должен предпринять, чтобы преодолеть это?

    Прокрутка «OS X-like» в Linux?

    Создайте пары ключей ssh ​​для копирования в другом месте, не испортив мою личную настройку ssh

    Расшифровать старые данные OpenSSL

    Сортировка данных журнала с помощью bash

    Проверка наличия строки в файле с cat | Grep

    Не удается установить lxml с пользовательским местом установки для libxml2 / libxslt

    Как изменить ограничение скорости для запуска экземпляра стекания

    Монетный двор: где установлены апплеты

    udev повторная нумерация при создании символических ссылок

    Вычисления даты без инструментов GNU

    Файловая система внезапно доступна только для чтения?

    Удалите N-ю строку из каждой строки, соответствующей шаблону

    Linux и Unix - лучшая ОС в мире.