2015-04-30 3 views
2

У меня есть database.yml файл какLinux оболочки получить значение поля из YML файла

development: 
    adapter: mysql2 
    encoding: utf8 
    database: d360 
    host: localhost 
    username: root 
    password: password 

test: 
    adapter: mysql2 
    encoding: utf8 
    database: sample 
    host: localhost 
    username: root 
    password: password 

Теперь я хочу, значение базы данных тестовой среды (то есть sample для YAML показан). Как мы можем это сделать с помощью sed?

ответ

4

Это довольно просто, не используя sed, но с соответствующими инструментами оболочки. Во-первых, если вам нужно сохранить sample в переменной для дальнейшего использования, а затем что-то вроде следующего будет работать, используя BASh замена подстроку изолировать sample на Тест:/база данных: линия:

$ db=$(grep -A3 'test:' database.yml | tail -n1); db=${db//*database: /}; echo "$db" 
sample 

или в течение более короткого решения, которое можно сбросить в командной строке, удалить подстановку переменных и команд и использовать такой инструмент, как cut:

$ grep -A3 'test:' database.yml | tail -n1 | cut -c 13- 
sample 

или с awk, просто:

$ grep -A3 'test:' database.yml | tail -n1 | awk '{ print $2}' 
sample 

Все различные способы могут быть использованы внутри подстановки команд (т.е. var=$(stuff)), чтобы сохранить sample в var, это просто вопрос, который вы предпочли бы использовать. Я думаю, вы поняли.

+0

Большое спасибо Дэвиду. Это то, что я искал :) – user3078630

2

YAML явно не поддерживается в оболочке. Но sed также не является парсером YAML. Также нет grep, tail, cut и т. Д. Я уверен, что вам нужен фактический язык, в котором можно написать правильный парсер. Awk, perl, python, erlang и т. Д.

Вы можете использовать sed или shell или somesuch, если знаете, что ваши данные YAML всегда будут отформатированы определенным образом или будут удерживать определенные значения в определенном порядке, но чтобы сделать синтаксический анализатор, который будет работать обычно, и в любом файле ol 'YAML, на который вы указываете его, вам нужно будет эмулировать парсеры, которые уже существуют на других языках.

Если вы не хотите писать свои собственные (возможно, попросите сообщество StackOverflow получить помощь после того, как у вас есть какой-нибудь код для рассмотрения), то одним из вариантов может быть установка такого инструмента, как shyaml, который может точно анализировать файлы и давать вам авторитетный контент. Быстрое решение легко внедряется в ваши скрипты, хотя оно имеет некоторые зависимости (python).

Смежные вопросы