Есть ли способ переносить часть форматированного текста?

У меня есть программа (в частности, node --version ), которая выводит текст в форме v<major>.<minor>.<patch> , где <major> , <minor> и <patch> – все числа. Я хотел бы извлечь основную версию из этой строки переносимым образом, который работает как на Linux, так и на OS X. В настоящее время я использую

 grep -oP "(?<=v)(\d+)(?=.\d+.\d+)" 

но похоже, что это не работает на OS X, потому что оно использует флаги по-разному. Есть ли способ сделать это, который работает в любой из этих систем?

2 Solutions collect form web for “Есть ли способ переносить часть форматированного текста?”

В bash вы можете использовать:

 IFS='v.' read -r throwaway major minor patch < <(node --version) 

Переменная throwaway получает пробел перед начальным v . Для тестирования не требуется машина OS X, но это должен быть хороший сценарий bash.

Вдохновленный комментариями mikeserv, я делаю это с помощью команды

 node --version | cut -d. -f1 | cut -c2- 

Это использует разрез с помощью . разделитель, чтобы извлечь только строку v<major> . Затем он снова использует разрез, чтобы все символы начинались со второго, что удаляет v .

Это использует только coreutils (помимо node ), что делает его максимально переносимым.

  • Программа сценария оболочки Bash, которая запрашивает и читает два целых числа от пользователя.
  • Отступ, как первая строка
  • Проверьте, имеют ли файлы в определенном каталоге надлежащее расширение?
  • Выполнение команд с помощью сценария ssh и оболочки с использованием переменных на удаленной машине
  • Как автоматически устанавливать пакеты?
  • Запуск сценария оболочки с бродячим обеспечением
  • Отображение командной строки (PS1) для набора каталогов
  • Могу ли я запускать скрипты Bash во FreeBSD без их модификации?
  • Сравните два числа, считанные из файла
  • Сравнение значений в одной строке
  • Передача нескольких аргументов с пробелами через скрипт в ssh
  • Interesting Posts

    установка высокопроизводительных вычислительных кластеров

    Изменено имя хоста, теперь я не могу запустить проверку tripwire: «файл политики не соответствует политике, используемой для создания базы данных»

    Заменить значение в таблице

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

    Есть ли способ «стабилизировать» прошлые встроенные нестабильные бинарные пакеты Gentoo без перестройки?

    Расширение параметра Shell

    Выполните команду, в которой найден файл

    Немедленно уничтожить сокеты TIME_WAIT?

    Как автоматически монтировать внутренние разделы жесткого диска в точки динамического подключения?

    Предупреждение Libgcrypt: MD5 используется – режим FIPS инактивирован

    ctrl c vs. ctrl z с заданием переднего плана

    Как объединить отдельные логические тома на один физический диск?

    ssh для private-ip

    Тестирование открытого TCP-порта в сценарии bash

    Невозможно установить имя хоста для использования в сети

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