此问题在此处已有答案:
Escape a string for a sed replace pattern(17个答案)
12天前关闭。
有没有一种更简单的方法可以用包含所有复杂字符的变量替换字符串,而不需要进行字符转义?
complex='~`!@#$%^&*()-_=+\|]}{[;:/?.>,<\/*&\#/'
sed -i "s/secret\ =\ \".*/secret\ =\ \"$complex\"/g" ./file.txt
我已经知道&
\
和/
是问题所在。我可以使用sed命令进行各种清理,但有没有更简单的方法?有没有方法可以让sed按原样读取该变量?
我现在的工作如下,但即使这样也不能正确地与/
一起工作...
complex='~`!@#$%^&*()-_=+\|]}{[;:/?.>,<\/*&\#/'
psk_bs="$(echo $complex | sed 's/\\/\\\\\\/g')"
psk_bs_amp="$(echo "$psk_bs" | sed 's/\&/\\&/g')"
psk_bs_amp_fs="$(echo "$psk_bs_amp" | sed 's,'/','\/',g')"
sed -i "s/secret\ =\ \".*/secret\ =\ \"$psk_bs_amp_fs\"/g" ./file.txt
1条答案
按热度按时间k4emjkb11#
我可以用sed命令进行各种清理,但有没有更简单的方法?有没有方法可以让sed直接读取变量?
恐怕没有。但是字符转义并不像你说的那么严重。这样就可以了:
有了bash 5.2,您甚至不需要sed来进行转义: