drno-reg
@drno-reg
см не кратко

Как правильно обрезать текст в bash?

Здравствуйте.

В общем мне нужно вытащить путь к site-packages

#  /opt/anaconda/envs/py36/bin/python -m site
sys.path = [
    '/etc/systemd/system',
    '/opt/anaconda/envs/py36/lib/python36.zip',
    '/opt/anaconda/envs/py36/lib/python3.6',
    '/opt/anaconda/envs/py36/lib/python3.6/lib-dynload',
    '/opt/anaconda/envs/py36/lib/python3.6/site-packages',
    '/opt/anaconda2/envs/py36/lib/python3.6/site-packages',
]
USER_BASE: '/root/.local' (exists)
USER_SITE: '/root/.local/lib/python3.6/site-packages' (doesn't exist)
ENABLE_USER_SITE: True


нагуглил вот такой способ

/opt/anaconda/envs/py36/bin/python -c "import site; print(site.getsitepackages())"
['/opt/anaconda/envs/py36/lib/python3.6/site-packages']


отлично но далее мне нужно обрезать [' и ']

признаться в bash никогда эту задачу не решал
в итоге получился вот такой скрипт

pathp="/opt/anaconda/envs/py36/bin/python -c \"import site; print(site.getsitepackages())\""
path1=$(eval "$pathp")
path1=$(echo $path1 | cut -c3-)
path1=$(echo $path1 | rev | cut -c3- | rev)


итого

echo $path1
/opt/anaconda/envs/py36/lib/python3.6/site-packages


Подозреваю есть какой-то более красивый способ, какой?
  • Вопрос задан
  • 236 просмотров
Решения вопроса 2
fox_12
@fox_12
Расставляю биты, управляю заряженными частицами
Конкретно в вашем случае:
python -c "exec(\"import site\nfor im in site.getsitepackages():print(im)\")"
Ответ написан
Комментировать
Oxyd
@Oxyd
Linux enthusiast
Без применения питона... и sed... Я его не люблю. ;-)
Способ раз:
path1=$(/opt/anaconda/envs/py36/bin/python -m site|grep "/anaconda/"|grep "site-packages"|cut -c 6-|rev|cut -c 3-|rev)

Способ два:
path1=$(/opt/anaconda/envs/py36/bin/python -m site|grep "/anaconda/"|grep "site-packages"|awk -F "'" '{print $2}')
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы