使用带正则表达式的Sed进行子串替换

时间:2011-12-13 20:08:01

标签: ubuntu command-line sed

我正在使用Ubuntu Natty。

我正在尝试使用sed使用命令行进行字符串替换。

我正在尝试替换的文本文件(app.config)部分如下:

%% http is a list of IP addresses and TCP ports that the Riak
%% HTTP interface will bind.
{http, [ {"127.0.0.1", 8098 } ]},

我正在尝试用其他东西替换IP地址。这是我的代码:

 ip="192.168.10.12"    
 sed -i "s/\(\{http,[\t ]*\[[\t ]*\{\)\"[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\"/\1\"$ip\"/" /root/sandbox/app.config

但是,我收到错误sed: -e expression #1, char 103: Invalid preceding regular expression

我做错了什么?

提前致谢。

2 个答案:

答案 0 :(得分:3)

添加正则表达式标记,编辑正则表达式,从({等关键字中删除转义符。似乎现在正在工作

ip="192.168.10.12"
sed -i -r "s/(\{http,[\t ]*\[[\t ]*\{)\"[1-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\"/\1\"$ip\"/" /root/sandbox/app.config

答案 1 :(得分:1)

这可能对您有用:

sed  "s/\({http,[\t ]*\[[\t ]*{\)\"[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\"/\1\"$ip\"/"

当它们是文字时,您无需转义{