Поиск в параметре элемента 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 шт):

Автор решения: Oxyd

Если angcore может быть только в элементах Content, то делается элементарно -- исключением grep.

buff=$(grep -v angcore example.csproj)&&echo $buff > example.csproj
→ Ссылка