不能用sedreplacestring。 获取未知选项

我想用sed (stream编辑器)replace一个string,但是我得到错误抛出。 可能是因为我没有正确使用string,因为符号。

我试图replace下面的string:

 <VirtualHost |IP|:|PORT_80| |MULTI_IP|> 

 <VirtualHost 127.0.0.1:8080 |IP|:8080 |MULTI_IP|> 

在名为virtual_host2.conf的文件中

当我尝试几件事情的时候,我总是会得到如下错误:

 sed: -e expression #1, char 90: unterminated `s' command sed: -e expression #1, char 20: unknown option to `s' 

我不是那种经验丰富的sed ,但我可以正常replace文本string。 但是我认为是因为当前string中的符号,比如|<>它不会像我所愿。

有人可以给我一个工作的例子,如何取代上述? 或者把我指向正确的方向。

我自己尝试了以下内容:

 sed -i 's<VirtualHost |IP|:|PORT_80| |MULTI_IP|>/<VirtualHost 127.0.0.1:8080 |IP|:8080 |MULTI_IP|>' /virtual_host2.conf sed -i 's|<VirtualHost |IP|:|PORT_80| |MULTI_IP|>|<VirtualHost 127.0.0.1:8080 |IP|:8080 |MULTI_IP|>|g' /virtual_host2.conf 

但是都提供了上面提到的错误。

任何想法?

你省略/sed 's///'模式。 试试这个

 sed 's/<VirtualHost |IP|:|PORT_80| |MULTI_IP|>/<VirtualHost 127.0.0.1:8080 |IP|:8080 |MULTI_IP|>/' /virtual_host2.conf 

如果一切正常,添加-i选项来执行文件中的真正replace。

g选项's///g'模式执行所有发生的全局replace,而不是每行中的第一个。


你可以使用其他一些符号作为分隔符,比如's

' ,但在你的例子中没有意义,因为你需要引用每个| 符号。 这个命令将得到相同的输出:

 sed 's|<VirtualHost \|IP\|:\|PORT_80\| \|MULTI_IP\|>|<VirtualHost 127.0.0.1:8080 \|IP\|:8080 \|MULTI_IP\|>|' /virtual_host2.conf