正则表达式适用于grep,但不适用于sed

时间:2017-01-31 08:26:02

标签: regex sed grep non-greedy

我创建了以下正则表达式,我可以成功地使用它来获取子字符串,但不能用sed替换它。

test@devs-ops01:~$ grep -Eo "server\shost-gso121.*?:[0-9]{4}\s;" upstream_clusters.conf
server host-gso121.domain.com:8080 ;

当我尝试在sed中使用相同的正则表达式时,它无法捕获它:

test@devs-ops01:~$ sed 's/server\shost-gso121.*?:[0-9]{4}\s;//' upstream_clusters.conf
upstream service_cluster {


    server host-gso120.domain.com:8080 ;server host-gso121.domain.com:8080 ;

    keepalive 8;
}

然而,如果我只是在没有所有特殊功能的情况下编写服务器的名称,那么sed命令会捕获它:

test@devs-ops01:~$ sed 's/host-gso121//' upstream_clusters.conf
upstream service_cluster {


    server host-gso120.domain.com:8080 ;server .domain.com:8080 ;

    keepalive 8;
}

任何建议都非常感谢!

1 个答案:

答案 0 :(得分:1)

@zeppelin解决方案为我解决了这个问题。

sed -E