Perl
如何使用 Perl 將無效字元替換為下劃線?
我在 $site 變數中有一個類似“www.mysite.com”的字元串。在 MySQL 中,不帶引號的標識符中允許的字元是(更多資訊:https ://dev.mysql.com/doc/refman/5.7/en/identifiers.html ):
- ASCII:$$ 0-9,a-z,A-Z$_ $$(基本拉丁字母、數字 0-9、美元、下劃線)
- 擴展:U+0080 .. U+FFFF
但是對我來說,現在就足以做這個正則表達式:’s/[^0-9a-zA-Z $ ]/ /g'
我想用下劃線替換 $site 的無效字元以使有效的架構對象名稱(如數據庫名稱)。替換應該使用 Perl 正則表達式來完成。在這個例子中。應該換成_
在 Bash 中:
site="www.mysite.com" mysql_db_name= ???
我的問題是,我不知道:
- 如何輸入 $ site to Perl regexp to do the replacements, then assign result to $ mysql_db_name 變數?
謝謝!
mysql_db_name=$(printf %s\\n "$site" | perl -lpe 'y/0-9a-zA-Z$_/_/c')
現在既然你很了解 Perl,就不需要任何解釋了。
mysql_db_name=${site//[!a-zA-Z_$0-9]/_} mysql_db_name=$(perl -se 'print y/0-9a-zA-Z$/_/cr' -- -_="$site")
如果您不必使用perl,請
tr
讓這變得簡單:mysql_db_name="$(echo -n "$site" | tr -C '0-9a-zA-Z_$' '_')"