用sed替换带引号和双引号的文本文件中的字符串

时间:2010-10-24 17:28:43

标签: string unix replace sed quotes

假设我想在文本文件中替换以下字符串:

document.write(unescape("%3Cscript src='" + \ + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));

我想出了这个sed命令,但令人惊讶的是没有任何事情发生。

sed -i "s/document.write(unescape(\"%3Cscript src=\"\' + \\ + \"google-analytics.com\/ga.js\' type=\'text\/javascript\'%3E%3C\/script%3E\"));//g" myfile.html

这里有什么问题?

1 个答案:

答案 0 :(得分:1)

  1. 反斜杠应该被双重转义,因为它们由sed和shell扩展。使用\\\\(在shell中变为\\,然后在\中变为sed
  2. 您在src="'上匹配,但您的文件包含src='"
  3. 使用

    sed -i \
    "s|document.write(unescape(\"%3Cscript src='\" + \\\\ + \"google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E\"));||g" \
    myfile.html
    

    我已将/替换为|以使其更具可读性(不再需要转义/)。