我尝试用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