shell相当于php preg_match?

And*_*per 6 php regex shell grep

有没有相当于PHP的preg_match的shell?

我正在尝试从shell脚本中的此字符串中提取数据库名称.

define('DB_NAME', 'somedb');
Run Code Online (Sandbox Code Playgroud)

在PHP中使用preg_match我可以做这样的事情.

preg_match('define(\'DB_NAME\','(.*)'\'\)',$matches);
echo $matches[1];
Run Code Online (Sandbox Code Playgroud)

如何在shell脚本中完成相同的操作?

Dig*_*oss 2

$ t="define('DB_NAME', 'somedb');"
$ echo $t
define('DB_NAME', 'somedb');
$ eval "result=(${t##*,}"
$ echo $result
somedb
$ 
Run Code Online (Sandbox Code Playgroud)

那个确实包含了 bashism,虽然它可以在大多数开箱即用的环境中工作,但为了坚持 posix shell 功能,请使用更笨重的版本:

t="define('DB_NAME', 'somedb');"
r="${t##*,}"
r="${r%);*}"
r=`eval echo $r`
Run Code Online (Sandbox Code Playgroud)