Как выделить слово из строки и присвоить его переменной?

Получаю список файлов на ftp сервере в виде строки:

-rw-r--r-- 1 10473 10473 0    Oct 13 09:18 rtrt.txt 
-rw-r--r-- 1 10473 10473 3091 Oct 13 09:16 test2.txt

как из него можно выделить только слова с определенным расширением, например .txt и записать их в переменную?

Файлов в выводе может быть больше и имена самых файлов неизвестны, только расширение.

Поиск grep'ом выводит всю строку , а мне нужно именно слова


Ответы (2 шт):

Автор решения: Sergey

Как-то так, наверное:

ls -l | cut -c50-120 | tail -n +1 | grep txt

Команда tail используется для пропуска первой строки, содержащей заголовок

→ Ссылка
Автор решения: aleksandr barakin
  1. чтобы было удобнее работать с именами файлов, можно получать ведь не полный листинг, а только имена файлов. например, если используете программу curl, то с помощью опции --list-only:

    $ curl --list-only ftp://ftp.nl.debian.org/debian/doc/
    00-INDEX
    FAQ
    bug-log-access.txt
    bug-log-mailserver.txt
    bug-mailserver-refcard.txt
    bug-maint-info.txt
    bug-maint-mailcontrol.txt
    bug-reporting.txt
    constitution.txt
    debian-manifesto
    dedication
    mailing-lists.txt
    social-contract.txt
    source-unpack.txt
    
  2. с помощью программы grep из этого списка можно отобрать только те имена, которые заканчиваются суффиксом .txt:

    $ curl -s --list-only ftp://ftp.nl.debian.org/debian/doc/ | grep '\.txt$'
    bug-log-access.txt
    bug-log-mailserver.txt
    bug-mailserver-refcard.txt
    bug-maint-info.txt
    bug-maint-mailcontrol.txt
    bug-reporting.txt
    constitution.txt
    mailing-lists.txt
    social-contract.txt
    source-unpack.txt
    

    я добавил ещё опцию -s, чтобы программа curl не формировла прогресс выполнения в stderr (что она делает, если stdout вместо терминала отправляется на stdin другой программе).

    grep '\.txt$' — здесь обратный слэш нужен для того, чтобы точка трактовалась как символ точки, а не как квантификатор, означающий «один любой символ». а $ — это квантификатор привязки к концу строки.

  3. ну а полученный список уже можно и в переменную поместить:

    $ v=$(curl -s --list-only ftp://ftp.nl.debian.org/debian/doc/ | grep '\.txt$')
    $ echo $v
    bug-log-access.txt bug-log-mailserver.txt bug-mailserver-refcard.txt bug-maint-info.txt bug-maint-mailcontrol.txt bug-reporting.txt constitution.txt mailing-lists.txt social-contract.txt source-unpack.txt
    
→ Ссылка