Intereting Posts

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

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

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

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

В 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 ), что делает его максимально переносимым.