我想替换输入文件中的文本。输入文件包含以下输入文本:
...
[
%% Riak Client APIs config
{riak_api, [
%% pb_backlog is the maximum length to which the queue of pending
%% connections may grow. If set, it must be an integer >= 0.
%% By default the value is 5. If you anticipate a huge number of
%% connections being initialised *simultaneously*, set this number
%% higher.
%% {pb_backlog, 64},
%% pb is a list of IP addresses and TCP ports that the Riak
%% Protocol Buffers interface will bind.
{pb, [ {"192.168.75.999", 8087 } ]}
]},
%% Riak Core config
...
我尝试输入以下SED正则表达式:
sed -i -e "s/\d{1,3}.\d{1,3}.\d{1,3}.\d{1,3}\", 8087/$my_ip\", 8087" /path/to/file
因此,我希望将旧IP地址192.168.58.999替换为服务器的实际IP地址。 “my_ip”变量与前一步骤中的服务器IP值一起归档。 SED执行正则表达式并返回而不会出错,但也不会对文件进行任何更改。
对于这个问题,我将不胜感激。 (我使用的是Ubuntu 12.04.2,64位)
答案 0 :(得分:1)
这有帮助吗?
kent$ my_ip="newIpAddr"
kent$ sed "s/\".*\"/\"$my_ip\"/" <<< '{pb, [ {"192.168.58.999", 8087 } ]}'
{pb, [ {"newIpAddr", 8087 } ]}
答案 1 :(得分:1)
你错过了第一个\d
的反斜杠,但这是没有意义的,因为sed不理解\d
。
sed -ire "s/[0-9]{1,3}(\.[0-9]{1,3}){3}\", 8087/$my_ip\", 8087/" /path/to/file
的变化:
-r
标志以启用扩展正则表达式。花括号需要。[0-9]
代替\d
。.
退出\.
,使其与句点匹配,而不是任何字符。\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}
缩写为(\.[0-9]{1,3}){3}
。答案 2 :(得分:0)
确定,
我设法解决了这个问题。使用以下SED代码段,它对我有用。
sed -ire "s/[0-9]*\.[0-9]*\.[0-9]*\.[0-9]*\"\, 8087/$my_ip \"\, 8087/g"