如何在sed中匹配带括号和撇号的字符串?

时间:2014-07-31 23:09:12

标签: bash sed

我正在尝试匹配并替换以下字符串:

<%=  host_env %><%= host_tenant_id %>.<%= domain_name %>/<%= products['as']['server_context_worker']  %>

有什么想法吗?我试过了:

<%=  host_env %><%= host_tenant_id %>\.<%= domain_name %>\/<%= products\['as'\]\['server_context_worker'\]  %>

以及它的各种变化,但我没有取得任何成功。

2 个答案:

答案 0 :(得分:0)

您可以使用字符类(即方括号本身)匹配sed中的括号。在您的示例中,您可以执行以下操作:

$sed -e 's/[[].*[]]/{something new}/' < sedbrackets.txt
<%=  host_env %><%= host_tenant_id %>.<%= domain_name %>/<%= products{something new}  %>

如果不是您要查找的替代品,请发表评论。你的问题有点不清楚。当然,你可以像你一样多次使用它们。我只是在.*之间使用它们一次作为例子。

答案 1 :(得分:0)

如果对匹配字符串使用不同的分隔符,则只需要转义括号和句点。

sed "s|<%=  host_env %><%= host_tenant_id %>.<%= domain_name %>/<%= products\['as'\]\['server_context_worker'\]  %>|Replacement Text|" <file>