Having some difficulty in replacing some single/double quoted text with sed and was wondering what’s the correct method for these 2 examples
to change Memached.ini file contents from
[server]
server[] = "localhost:11211"
to
[server]
server[] = "localhost:11211"
server[] = "localhost:11212"
and to change memcache.php file contents for these lines from
define('ADMIN_USERNAME','username'); // Admin Username
define('ADMIN_PASSWORD','password'); // Admin Password
$MEMCACHE_SERVERS[] = 'mymemcache-server1:11211'; // add more as an array
$MEMCACHE_SERVERS[] = 'mymemcache-server2:11211'; // add more as an array
to
define('ADMIN_USERNAME','myusername'); // Admin Username
define('ADMIN_PASSWORD','mypassword'); // Admin Password
$MEMCACHE_SERVERS[] = 'localhost:11211'; // add more as an array
$MEMCACHE_SERVERS[] = 'localhost:11212'; // add more as an array
I tried for example
sed -i 's/'ADMIN_USERNAME','memcache'/'ADMIN_USERNAME','u'/g' /var/www/html/memcache.php
while command runs, memcache.php file isn’t changed at all ?
You can replace the single quotes in the sed command with double-quoted single quotes. The shell sees a single quote as ending a string. So, let it. You had
But, if you replace the ‘ in the sed command with ‘”‘”‘, then shell will see the first ‘ as ending the first single-quoted string, then “‘” as a double-quoted single quote, and then the last ‘ as a beginning of a new single-quoted string. That’d be
You should also be able to do ‘\” in place of the ‘ within the command, for the same reason.
But really, it’d be better to use an alternative mechanism. I’d suggest defining the source and target strings as variables, and then put those in the sed string.
That’s way more readable, and it makes it easier for you to handle the quoting mess in a sane way with bite-sized chunks. Yay “shell variable contents aren’t subject to word expansion unless you force it” knowledge. 🙂
Make sure you don’t put a / in the $SRC or $DST variables, though. 😉