代码之家  ›  专栏  ›  技术社区  ›  Code With Banchi

在sed命令中使用变量-sed-e异常:“s”的选项未知

  •  1
  • Code With Banchi  · 技术社区  · 3 年前

    假设我们有两个变量

    var1='<tr><th>Text</th><tr>
    var2='<tr><th>Text</th><td>No applications<td><tr>'
    

    如果第一个(var1)文本部分在我的文件中可用,我想用第二个(var2)文本部分替换它。

    我写的命令是

    sed -i -e "s/$var1/$var2/g" mypage.html
    

    这不起作用,并给出一条错误消息,提示“-sed-e异常:“s”的选项未知” 我试着去掉-e部分。它也不起作用

    我该怎么做?

    1 回复  |  直到 3 年前
        1
  •  1
  •   Thomas    3 年前

    问题是您给的分隔符 s / ,也出现在 $var1 $var2 。只需选择在这些变量中不出现的其他分隔符,例如 | :

    sed -i -e "s|$var1|$var2|g" mypage.html
    
        2
  •  1
  •   glenn jackman    3 年前

    更改 s 分隔符(如果数据包含 那个角色 还有?)是转义变量中的分隔符。

    警告:向前倾斜牙签综合症

    sed "s/${var1//\//\\\/}/${var2//\//\\\/}/g" mypage.html
    

    演示:

    $ cat > mypage.html
    <html><body><table>
    <tr><th>Text</th><tr>
    </table></body></html>
    
    $ sed "s/${var1//\//\\\/}/${var2//\//\\\/}/g" mypage.html
    <html><body><table>
    <tr><th>Text</th><td>No applications<td><tr>
    </table></body></html>