正则表达式在 grep 中有效,但在 sed 中无效
Regex works in grep, but not in sed
我创建了以下正则表达式,我可以成功地使用它来获取子字符串,但不能用 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;
}
非常感谢任何建议!
@zeppelin 解决方案为我解决了这个问题。
sed -E
我创建了以下正则表达式,我可以成功地使用它来获取子字符串,但不能用 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;
}
非常感谢任何建议!
@zeppelin 解决方案为我解决了这个问题。
sed -E