Substituir string desconhecida usando sed no script bash

3

Digamos que eu tenha um wp-config.php assim:

define('DB_NAME', 'db_name');
define('DB_USER', 'user');
define('DB_PASSWORD', 'pass');

No meu script bash, tenho uma construção semelhante a:

#!/usr/bin/bash

# Database config
echo -e "\ndatabase name: \c"
read DB_NAME
sed -i -e "s/define('DB_NAME', );/define('DB_NAME', $DB_NAME);/g" "C:/Apache24/htdocs/test.txt"

Não funciona no entanto. Como eu poderia editar (usando sed ) as variáveis db_name , user & pass in test.txt dado que estas variáveis normalmente seriam desconhecidas antecipadamente?

    
por cookie 19.02.2017 / 14:42

1 resposta

2
eval "'echo 'NL=qsq' | tr 'qs' '72''"; # newline
echo DB_NAME; read DB_NAME;
db_name_esc=$DB_NAME
db_name_esc=${db_name_esc//\/\\\\}   # escape backslash
db_name_esc=${db_name_esc//\'/\\\'}     # escape single quote
db_name_esc=${db_name_esc//\"/\\"}       # escape double quote
db_name_esc=${db_name_esc//&/\&}         # escape & special to sed
db_name_esc=${db_name_esc//\//\\/}       # escape / special to s///
db_name_esc=${db_name_esc//${NL}/\${NL}} # esc literal newline for sed

# and then plug in your variables properly escaped for both PHP+sed
sed -e "
   s/\(define('DB_NAME',\).*/\1 '$db_name_esc');/
" yourfile
    
por 19.02.2017 / 16:14