sed replace single/double quoted text?

后端 未结 4 1255
南旧
南旧 2021-02-04 06:11

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

4条回答
  •  闹比i
    闹比i (楼主)
    2021-02-04 06:50

    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

    sed -i 's/'ADMIN_USERNAME','memcache'/'ADMIN_USERNAME','u'/g' /var/www/html/memcache.php
    

    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

    sed -i 's/'"'"'ADMIN_USERNAME'"'"','"'"'memcache'"'"'/'"'"'ADMIN_USERNAME'"'"','"'"'u'"'"'/g' /var/www/html/memcache.php
    

    You should also be able to do '\'' in place of the ' within the command, for the same reason.

    sed -i 's/'\''ADMIN_USERNAME\'',\''memcache\''/\''ADMIN_USERNAME\'',\''u\''/g' /var/www/html/memcache.php
    

    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.

    SRC="'ADMIN_USERNAME','memcache'"
    DST="'ADMIN_USERNAME','u'"
    sed -i "s/$SRC/$DST/g" /var/www/html/memcache.php
    

    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. ;)

提交回复
热议问题