Sed 命令和正则表达式
Sed command and regular expressions
我需要将 '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
如有任何帮助,我们将不胜感激。
提前致谢。
执行于bash
$ echo bind 12.54.36.165:35357 | sed "s/bind [^:]\+:35357/bind a.y.z.a:35357/"
bind a.y.z.a:35357
我想你需要这样的想法:
sed -r 's/^(bind\s+)([^.]+)\.([^.]+)\.([^.]+)\.([^.:]+)(:80(\s+.*)?)$/x..f./g' haproxy-sample.cfg
你必须用你需要的字符串替换文字 .f.
和 x.
(在 sed s
的第二部分)。
它捕获各个部分(bind
,地址的四个数字,:80
直到lineend进入</code>到<code>
并重新组合捕获的字符串b
和 f
.
问题是您的模式包含一个单独的 *
-- 您可能正在考虑 shell 通配模式,其中 *
匹配 0 个或多个任意字符。 sed 不讲 shell 模式,它讲正则表达式。
如果只有 *
,则需要 .*
——在正则表达式中,.
字符是匹配任何一个字符的通配符,而 *
是 quantifier 匹配前面的零个或多个。
sed -i 's/\(bind \).*\(:35357\)/x.y.z.a/'
我需要将 '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
如有任何帮助,我们将不胜感激。
提前致谢。
执行于bash
$ echo bind 12.54.36.165:35357 | sed "s/bind [^:]\+:35357/bind a.y.z.a:35357/"
bind a.y.z.a:35357
我想你需要这样的想法:
sed -r 's/^(bind\s+)([^.]+)\.([^.]+)\.([^.]+)\.([^.:]+)(:80(\s+.*)?)$/x..f./g' haproxy-sample.cfg
你必须用你需要的字符串替换文字 .f.
和 x.
(在 sed s
的第二部分)。
它捕获各个部分(bind
,地址的四个数字,:80
直到lineend进入</code>到<code>
并重新组合捕获的字符串b
和 f
.
问题是您的模式包含一个单独的 *
-- 您可能正在考虑 shell 通配模式,其中 *
匹配 0 个或多个任意字符。 sed 不讲 shell 模式,它讲正则表达式。
如果只有 *
,则需要 .*
——在正则表达式中,.
字符是匹配任何一个字符的通配符,而 *
是 quantifier 匹配前面的零个或多个。
sed -i 's/\(bind \).*\(:35357\)/x.y.z.a/'