Поиск в параметре элемента XML
В файле проекта .net проекта example.csproj есть элементы, которые мне нужно удалить и вставить новые программным способом (например ч/з bash скрипт).
Есть файл example.csproj
<Project ToolsVersion="16.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import foo="bar" />
<PropertyGroup>
<!-- ... -->
</PropertyGroup>
<PropertyGroup>
<!-- ... -->
</PropertyGroup>
<ItemGroup>
<Reference Include="System.Runtime.Caching" />
<Reference Include="System.Runtime.Serialization" />
<Reference Include="System.ServiceModel" />
<!-- etc -->
</ItemGroup>
<ItemGroup>
<Compile Include="root\Data\IAttachmentsHost.cs" />
<Compile Include="root\Data\CachedDataList.cs" />
<Compile Include="root\Data\ElevatedSharePointDataList.cs" />
<!-- etc -->
</ItemGroup>
<ItemGroup>
<Content Include="root\other\resources\1" />
<Content Include="root\other\resources\2" />
<Content Include="root\other\resources\3" />
<Content Include="root\Common\angcore\11" />
<Content Include="root\Common\angcore\1133" />
<Content Include="root\Common\angcore\1144" />
</ItemGroup>
<ItemGroup />
<ItemGroup>
<Content Include="root\other\resources\4" />
<Content Include="root\other\resources\5" />
<Content Include="root\other\resources\6" />
</ItemGroup>
</Project>
Мне необходимо удалить все элементы, в которых Include содержит ключевое слово angcore.
Для этой задачи я использую xmlstarlet, т.к. после удаления, мне нужно будет потом добавлять в XML элементы.
Пробую удалить элементы так, но что то пошло не так.
ed -d "/Project/ItemGroup/Content[@Include=contains(text(), "angcore")]" example.csproj
Конечно, для удаления я могу просто воспользоваться sed, но хотелось бы работать с XML инструментами предназначенными для XML. На худой конец, если ничего не получится, то я вернусь к варианту удаления ч/з sed, вот так:
sed '/^.*angcore\\.*$/g' example.csproj
Но такой вариант отставляет пустые строки, а мне это не нужно.
Ответы (1 шт):
Если angcore может быть только в элементах Content, то делается элементарно -- исключением grep.
buff=$(grep -v angcore example.csproj)&&echo $buff > example.csproj