Из вывода:
$ pyenv virtualenvs
Я хочу извлечь с помощью sed имена виртуальных сред, а также их путь. То же самое для среды по умолчанию помечено звездочкой. Результаты выглядят так:
3.6.3/envs/venv_1 (created from /home/user/.pyenv/versions/3.6.3)
* anaconda3-5.0.0 (created from /home/user/.pyenv/versions/anaconda3-5.0.0)
venv_py3.6.3__test_01 (created from /home/user/.pyenv/versions/3.6.3)
С PCRE в качестве аромата:
^\*\s([a-zA-Z0-9\.\-]*)\s\(created\sfrom\s([a-zA-Z0-9\.\-\/]*)
Я могу захватить обе группы без проблем:
Группа 1: анаконда3-5.0.0
Группа 2: /home/user/.pyenv/versions/anaconda3-5.0.0
(проверено на https://regex101.com)
но я не могу заставить его работать с sed.
До сих пор мне удавалось, например, для среды по умолчанию извлечь имя с помощью:
sed -e 's/^\*\s\(.*\)\s(created\(.*\)/\1/
anaconda3-5.0.0
но для пути я получаю с:
sed -e 's/^\*\s\(.*\)\s(created\sfrom\s\(.*\)/\2/'
/home/user/.pyenv/versions/anaconda3-5.0.0)
а именно в правом конце есть также скобка. Я знаю, что это неправильный подход, но я не мог сделать его лучше.
Любые идеи, как можно заставить его работать с sed?
ОБНОВИТЬ:
На данный момент у меня есть это:
для имен:
$ pyenv virtualenvs | sed -r 's/\(created\s*from\s*//g;s/\)//g;s/^\s*//g' | awk '{print $1}'
для путей:
$ pyenv virtualenvs | sed -r 's/\(created\s*from\s*//g;s/\)//g;s/^\s*//g' | awk '{print $2}'