Как раскомментировать XML блок с помощью SED - PullRequest
0 голосов
/ 17 апреля 2020

Как я могу откомментировать блок, содержащий теги фильтра из моего xml файла, используя SED? Только этот блок должен быть без комментариев. другой закомментированный код следует оставить на месте.

<a> test <a>
<!--
<filter>
    <filter-name>httpHeaderSecurity</filter-name>
    <filter-class>org.apache.catalina.filters.HttpHeaderSecurityFilter</filter-class>
    <async-supported>true</async-supported>
</filter>-->

<!-- <b> leave this one alone </b>-->

1 Ответ

0 голосов
/ 17 апреля 2020

С GNU sed для -z это раскомментирует все закомментированные блоки, предполагая, что <!-- и --> не появляются в других контекстах:

$ sed -z '
    s/@/@A/g; s/{/@B/g; s/}/@C/g; s/<!--/{/g; s/-->/}/g;
    s/{\([^}]*\)}/\1/g;
    s/}/-->/g; s/{/<!--/g; s/@C/}/g; s/{/@B/g; s/@A/@/g
' file
<a> test <a>

<filter>
    <filter-name>httpHeaderSecurity</filter-name>
    <filter-class>org.apache.catalina.filters.HttpHeaderSecurityFilter</filter-class>
    <async-supported>true</async-supported>
</filter>

 <b> leave this one alone </b>

Если вы хотите раскомментировать один указанный c block, затем измените s/{\([^}]*\)}/\1/g на любое регулярное выражение, которое вам подходит, например:

$ sed -z '
    s/@/@A/g; s/{/@B/g; s/}/@C/g; s/<!--/{/g; s/-->/}/g;
    s/{\([^}]*catalina[^}]*\)}/\1/g;
    s/}/-->/g; s/{/<!--/g; s/@C/}/g; s/{/@B/g; s/@A/@/g
' file
<a> test <a>

<filter>
    <filter-name>httpHeaderSecurity</filter-name>
    <filter-class>org.apache.catalina.filters.HttpHeaderSecurityFilter</filter-class>
    <async-supported>true</async-supported>
</filter>

<!-- <b> leave this one alone </b>-->

См. , как найти поисковый термин в исходном коде , для чего все подстановки до / после что делают.

...