sed单引号

Cha*_*ter 4 bash escaping sed

我一直在使用SED(Bash shell)来逃避单引号的问题.

我需要做

$cfg['Servers'][$i]['password'] = '';
Run Code Online (Sandbox Code Playgroud)

$cfg['Servers'][$i]['password'] = 'mypassword';
Run Code Online (Sandbox Code Playgroud)

我试过的是:

sed -i "s/$cfg['Servers'][$i]['password'] = '';/$cfg['Servers'][$i]['password'] = '$rootpassword';/g" /usr/share/phpmyadmin/libraries/config.default.bak
Run Code Online (Sandbox Code Playgroud)

最终真的让这条线路变得笨拙.

$cfg['Servers'][$i]['password['Servers'][]['passsword'] = 'mypassword'
Run Code Online (Sandbox Code Playgroud)

我试过'\''来逃避单引号,我认为太阳下的其他所有东西都不能在那里得到它.

任何人都可以指出我可能出现的明显错误吗?

谢谢.

Ken*_*ent 13

而不是逃避,你可以使用\x27单引号.这不仅适用于sed,也适用于awk等.

看测试:

kent$  cat tt
$cfg['Servers'][$i]['password'] = ''

kent$  sed -r 's/(\$cfg\[\x27Servers\x27\]\[\$i\]\[\x27password\x27\] \= \x27)\x27/\1mypassword\x27/g' tt
$cfg['Servers'][$i]['password'] = 'mypassword'
Run Code Online (Sandbox Code Playgroud)

请注意,sed行可能不是解决问题的最佳方法,例如将整个字符串放到"s /../"可能没有必要.但是,我只想说明\ x27是如何工作的.