Como substituir chars inválidos para sublinhado usando Perl?

1

Eu tenho uma string como "www.mysite.com" na variável $ site. No MySQL, os caracteres permitidos em identificadores não citados são (mais informações: link ):

  • ASCII: [0-9, a-z, A-Z $ _] (letras latinas básicas, dígitos 0-9, dólar, sublinhado)
  • Estendido: U + 0080 .. U + FFFF

No entanto, para mim agora seria o suficiente para fazer essa expressão regular: '/ [^ 0-9a-zA-Z \ $ ] / / g'

Eu gostaria de substituir caracteres inválidos de $ site para tornar válido o nome de objeto de esquema (como nome do banco de dados) com sublinhado. Substituir deve ser feito com o regex Perl. Neste exemplo, o. deve ser substituído por _

No Bash:

site="www.mysite.com"
mysql_db_name= ???

Meu problema é que eu não sei:

  • Como inserir $ site para o regexp do Perl para fazer as substituições e, em seguida, atribuir o resultado à variável $ mysql_db_name?

Obrigado!

    
por klor 05.07.2017 / 18:32

2 respostas

6
mysql_db_name=$(printf %s\n "$site" | perl -lpe 'y/0-9a-zA-Z$_/_/c')

Agora, como você conhece Perl bem, não há necessidade de explicações.

mysql_db_name=${site//[!a-zA-Z_$0-9]/_}

mysql_db_name=$(perl -se 'print y/0-9a-zA-Z$/_/cr' -- -_="$site")
    
por 05.07.2017 / 18:40
8

Se você não tiver para usar o perl, tr tornará isso simples:

mysql_db_name="$(echo -n "$site" | tr -C '0-9a-zA-Z_$' '_')"
    
por 05.07.2017 / 18:39

Tags