是否有与 PHP 的 preg_match 等效的 shell?
我正在尝试从 shell 脚本中的这个字符串中提取数据库名称。
define('DB_NAME', 'somedb');
在 PHP 中使用 preg_match 我可以做这样的事情。
preg_match('define(\'DB_NAME\','(.*)'\'\)',$matches);
echo $matches[1];
我怎样才能在 shell 脚本中完成同样的事情?
最佳答案
使用 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 在哪些环境下可用(并且有这种行为)。
关于php - shell 相当于 php preg_match?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1425121/