Использование expr отвечает именно на вопрос:
expr match "string" "regexp"
Итак, для своих нужд вы можете написать:
expr match "$mystring" "define('DB_NAME', '\([^']\+\)');"
Обратите внимание на пару \( \)
.
Без этих символов expr вернет количество совпавших символов.
С ними возвращается только соответствующая часть.
$ string="define('DB_NAME', 'toto');"
$ expr match "$string" "define('DB_NAME', '[^']\+');"
26
$ string="define('DB_NAME', 'toto');"
$ expr match "$string" "define('DB_NAME', '\([^']\+\)');"
toto
Я не знаю, в каких средах доступен expr (и имеет такое поведение).