![bash 스크립트에서 알 수 없는 문자열을 바꾸려면 sed를 사용하세요.](https://linux55.com/image/105823/bash%20%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8%EC%97%90%EC%84%9C%20%EC%95%8C%20%EC%88%98%20%EC%97%86%EB%8A%94%20%EB%AC%B8%EC%9E%90%EC%97%B4%EC%9D%84%20%EB%B0%94%EA%BE%B8%EB%A0%A4%EB%A9%B4%20sed%EB%A5%BC%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%84%B8%EC%9A%94..png)
다음과 같은 것이 있다고 가정해 보겠습니다 wp-config.php
.
define('DB_NAME', 'db_name');
define('DB_USER', 'user');
define('DB_PASSWORD', 'pass');
내 bash 스크립트에는 다음과 유사한 구성이 있습니다.
#!/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"
그러나 그것은 작동하지 않습니다. sed
변수 & 는 일반적으로 미리 알려져 있지 않은 경우 db_name
어떻게 편집(사용)합니까?user
pass
test.txt
답변1
eval "`echo 'NL=qsq' | tr 'qs' '\047\012'`"; # 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