我需要将'bind a.b.c.d:80'更改为'bind x.b.f.d:80'。我为此目的写了下面的命令,但它不起作用,我不知道为什么?
sed -i 's,bind *:35357,bind x.y.z.a:35357,' haproxy-sample.cfg
任何帮助都将不胜感激。
提前致谢。
答案 0 :(得分:1)
从bash执行
$ echo bind 12.54.36.165:35357 | sed "s/bind [^:]\+:35357/bind a.y.z.a:35357/"
bind a.y.z.a:35357
答案 1 :(得分:0)
我认为你需要这样的想法:
sed -r 's/^(bind\s+)([^.]+)\.([^.]+)\.([^.]+)\.([^.:]+)(:80(\s+.*)?)$/\1x.\3.f.\5\6/g' haproxy-sample.cfg
您必须使用所需的字符串替换文字.f.
和x.
(在sed s
的第二部分中)。
它捕获各个部分(bind
,地址的四个数字,:80
直到lineend到\1
到\6
并重新捕获所捕获的字符串b
和f
。
答案 2 :(得分:0)
问题是你的模式包含一个*
- 你可能正在考虑shell *
匹配0个或更多任何字符的shell globbing模式。 sed不会说shell模式,它会说正则表达式。
只有*
,您需要.*
- 在正则表达式中,.
字符是匹配任何一个字符的通配符,而*
是量词匹配前面的零个或多个。
sed -i 's/\(bind \).*\(:35357\)/\1x.y.z.a\2/'