Perl

如何使用 Perl 將無效字元替換為下劃線?

  • July 6, 2017

我在 $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_$' '_')"

引用自:https://unix.stackexchange.com/questions/375520