sed 查找并用特殊字符替换字符串

sed 查找并用特殊字符替换字符串

正在尝试更换

window.location = '/loft-run'+ResourceManager.hotlegs + mainPage + ".html#" + newhash;

window.location = ResourceManager.hotlegs + mainPage + ".html#" + newhash;

在一个文件中。我尝试过什么

sed -i 's~/loft-run'+ResourceManager.hotlegs + mainPage + ".html#" + newhash"~ResourceManager.hotlegs + mainPage + ".html#" + newhash"' Warmblanket.js

尝试过一些 sed 命令但没有太大帮助。您的建议将会有很大帮助。

答案1

像这样:

sed -i "s@'/loft-run'\+@@" warmblanket.js
  • 替换的基本形式是s/before/after/
  • 使用双引号如果你想治疗单引号
  • 这里选择@分隔符而不是 basic /,你可以拾取大部分 ASCII 表

答案2

sed 不知道文字字符串,只知道正则表达式和启用反向引用的文本。要对文字字符串执行任何操作,只需使用可以理解它们的工具,例如 awk:

$ cat file
window.location = '/loft-run'+ResourceManager.hotlegs + mainPage + ".html#" + newhash;

$ awk \
    -v old="window.location = '/loft-run'+ResourceManager.hotlegs + mainPage + \".html#\" + newhash;" \
    -v new='window.location = ResourceManager.hotlegs + mainPage + ".html#" + newhash;' \
    's=index($0,old) { $0=substr($0,1,s-1) new substr($0,s+length(old)) } 1' file
window.location = ResourceManager.hotlegs + mainPage + ".html#" + newhash;

请注意在字符串周围使用",而不是 ,因为该字符串包含s 并且 shell 不允许在 - 分隔的字符串中使用 s 。'old=...'''

相关内容