使用sed替换

时间:2015-08-23 11:44:05

标签: bash sed

我有以下XML标记

 <ListBox 
            x:Name="main_menu" HorizontalAlignment="Left"   Margin="8,8,0,8" Width="160"
                 ItemTemplate="{DynamicResource MetroListBoxItemTemplate}" 
     ItemContainerStyle="{DynamicResource MetroListBoxItemStyle}"
     ItemsSource="{Binding Menu}">

</ListBox>

在用&#39; sed&#39;替换之后它应该如下所示

<fileset dir="${shared.resource.dir}/worklightconsole/lib" includes="worklight-jee-library.jar"/>

我应该替换“worklightconsole”这个词。与&#39; app&#39;

我尝试了以下&#39; sed命令&#39;还有很少的其他选择,但我没有成功,同时它没有抛出任何错误

<fileset dir="${shared.resource.dir}/app/lib" includes="worklight-jee-library.jar"/> 

请帮我解决问题

1 个答案:

答案 0 :(得分:1)

您的模式似乎存在一些问题,主要是您可能定义捕获组的方式,特别是第1组:

sed 's|\(resource.dir}/\)worklightconsole\(/lib"\)|\1app\2|g

我相信你想要逃避捕获组中的()括号(至少我通常需要这样做)。并且您的第一个捕获组错过了原始字符串中的}。最后一个问题是你有[^/]你可能在第一个捕获组中使用/后退了 - 它不清楚,虽然我从你的模式中删除了它工作

<强>结果

<fileset dir="${shared.resource.dir}/app/lib" includes="worklight-jee-library.jar"/>

编辑:使用-E选项可以避免转义括号()

sed -E 's|(resource.dir}/)worklightconsole(/lib")|\1app\2|g