這個問題在這里已經有了答案: 為 sed 替換模式轉義字串 17 個答案 2天前關閉。
有沒有一種更簡單的方法可以用包含所有復雜字符的變數替換字串,而無需進行字符轉義?
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
uj5u.com熱心網友回復:
我可以使用 sed 命令進行各種清理,但有更簡單的方法嗎?有沒有一種方法可以讓 sed 按原樣讀取該變數?
恐怕沒有。但是角色轉義并不像你想象的那么重要。這會很好地作業:
psk=$(sed 's/[/&\]/\\&/g' <<< $complex)
sed -i "s/secret = \".*/secret = \"$psk\"/g" ./file.txt
使用 bash 5.2,您甚至不需要 sed 進行轉義:
psk=${complex//[\/&\\]/\\&}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/531756.html
