#regex #unix #awk #sed #grep
#регулярное выражение #unix #awk #sed #grep
Вопрос:
Приветствую сообщество Stack Overflow.
В настоящее время я борюсь с относительно простой вещью. Чтобы автоматически находить и регистрировать конфигурации приложений, я в настоящее время работаю над скриптом, который считывает данные конфигурации из файла конфигурации определенных приложений. Поскольку эти конфигурационные файлы могут различаться по синтаксису, и единственной константой является шаблон, например, имен БД, я хочу извлечь эти имена БД с помощью регулярного выражения.
Например:
Имена БД всегда имеют синтаксис db_s{serverid}_{dbid}
где идентификатор сервера состоит из 2-4 чисел, а идентификатор базы данных из 2-4 чисел, считая вверх. допустимыми именами БД были бы, например:
db_s0001_01
db_s1337_42
db_s123_123
db_s42_1337
Имена баз данных хранятся в файлах конфигурации с различным синтаксисом, в зависимости от используемого приложения.
Вот несколько примеров:
define( 'DB_NAME', 'db_s0001_01' );
define( 'DB_NAME', "db_s0001_01" );
'dbname' => 'db_s0001_01',
'dbname' => "db_s0001_01",
database_name: db_s0001_01
Разбиение конфигурационных файлов для получения правильных строк для правильных учетных переменных не является проблемой. Но как бы мне продолжить и извлечь точное имя базы данных из конфигурационных строк?
Регулярное выражение должно быть чем-то вроде
(db_s[0-9]{2,4}_[0-9]{2,4})
Но я не совсем понимаю, какой инструмент использовать и как извлечь точное имя базы данных.
Итак, как бы извлечь из этого только имя базы данных?
echo 'define( 'DB_NAME', "db_s0001_01" );' | grep/sed/awk (db_s[0-9]{2,4}_[0-9]{2,4})
Комментарии:
1. Одинарные кавычки не вставляются. Попробуйте
echo
без какого-либо канала, он не печатает то, что вы ожидаете.
Ответ №1:
Как упоминалось в комментариях, символы одинарных кавычек не вставляются. Итак, входные данные, с которыми вы тестируете, неверны. После исправления этого я бы использовал sed
для извлечения имен БД следующим образом:
echo "define( 'DB_NAME', "db_s0001_01" );" | sed 's/.*(db_s[0-9]{2,4}_[0-9]{2,4}).*/1/g'