我在 $site 变量中有一个像“www.mysite.com”这样的字符串。在 MySQL 中,未加引号的标识符中允许的字符是(更多信息:https : //dev.mysql.com/doc/refman/5.7/en/identifiers.html):
但是对我来说,现在做这个正则表达式就足够了: 's/[^0-9a-zA-Z\$ ]/ /g'
我想用下划线替换 $site 的无效字符以生成有效的架构对象名称(如数据库名称)。替换应该用 Perl 正则表达式完成。在这个例子中。应该用_代替
在 Bash 中:
site="www.mysite.com"
mysql_db_name= ???
Run Code Online (Sandbox Code Playgroud)
我的问题是,我不知道:
谢谢!
如果你不具备用perl,tr
使这个死简单:
mysql_db_name="$(echo -n "$site" | tr -C '0-9a-zA-Z_$' '_')"
Run Code Online (Sandbox Code Playgroud)
小智 6
mysql_db_name=$(printf %s\\n "$site" | perl -lpe 'y/0-9a-zA-Z$_/_/c')
Run Code Online (Sandbox Code Playgroud)
既然你已经很了解 Perl,就不需要任何解释了。
mysql_db_name=${site//[!a-zA-Z_$0-9]/_}
mysql_db_name=$(perl -se 'print y/0-9a-zA-Z$/_/cr' -- -_="$site")
Run Code Online (Sandbox Code Playgroud)