我有一个脚本,它读取文本流并生成一个 sed 命令文件,该文件稍后使用sed -f
. 生成的 sed 命令如下:
s/cid:image002\.gif@01CC3D46\.926E77E0/https:\/\/mysite.com\/files\/1922/g
s/cid:image003\.gif@01CC3D46\.926E77E0/https:\/\/mysite.com\/files\/1923/g
s/cid:image004\.jpg@01CC3D46\.926E77E0/https:\/\/mysite.com\/files\/1924/g
Run Code Online (Sandbox Code Playgroud)
假设生成sed
命令的脚本类似于:
while read cid fileid
do
cidpat="$(echo $cid | sed -e s/\\./\\\\./g)"
echo 's/'"$cidpat"'/https:\/\/mysite.com\/files\/'"$fileid"'/g' >> sedscr
done
Run Code Online (Sandbox Code Playgroud)
如何改进脚本以确保cid
字符串中的所有正则表达式元字符都被正确转义和插入?
如果您想使用 sed 用字符串替换关键字,sed 会努力解释您的替换字符串。如果替换字符串碰巧包含 sed 认为特殊的字符,例如 '/' 字符,它将失败,除非您当然希望替换字符串包含告诉 sed 如何操作的字符。
前任:
VAR="hi/"
sed "s/KEYWORD/$VAR/g" somefile
Run Code Online (Sandbox Code Playgroud)
有没有办法告诉 sed 不要尝试解释特殊字符的替换字符串?我想要的只是能够用变量的内容替换文件中的关键字,无论该内容是什么。