无法使用 sed 替换字符串。获取未知选项

无法使用 sed 替换字符串。获取未知选项

我尝试用sed(流编辑器)替换字符串,但出现错误。可能是因为我没有正确使用字符串,因为有符号。

我正在尝试替换以下字符串:

<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,但我可以正常替换文本字符串。但我认为是因为当前字符串中的符号,如 和|<>不像我想的那样工作。

有人能给我一个如何替换上述内容的实用示例吗?或者给我指出正确的方向。

我自己尝试了以下方法:

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

但两者都会出现如上所述的错误。

任何想法?

答案1

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

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

如果一切正常,则添加-i选项以在文件中执行实际替换。

g模式中的选项's///g'对所有出现的项执行全局替换,而不是每行中的第一个。


您可以使用其他一些符号作为分隔符,例如's|||',但这在您的示例中没有意义,因为您需要引用每个|符号。此命令将获得相同的输出:

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

相关内容