Substituir parte de uma linha por outra parte da mesma linha

0

Eu tenho um arquivo como este:

<receiver name="anything" type="com.mycompany.plugin.Timer">
  <property name="interval">5000</property>
  <handler name="ReplaceThis" type="com.mycompany.handler.FileBuilderHandler">
    <property name="buildSomething">true</property>
    <handler name="AlsoReplaceThis" type="com.mycompany.handler.FileExporter">
      <property name="overide">true</property>
    </handler>
  </handler>
</receiver>

<receiver name="anything/other" type="com.mycompany.plugin.Timer">
  <property name="intervall">1000</property>
  <handler name="ThisMustBeReplaceAsWell" type="com.mycompany.handler.FileWatcher">
    <property name="interval">2000</property>
    <handler name="ThisMustBeReplaceAsWell" type="com.mycompany.converter.CSConverter">
      <property name="mandant">CE</property>
      <handler name="RemoveThis" type="com.mycompany.handler.FileExporter">
        <property name="outputDir">/usr1/import</property>
      </handler>
    </handler>

Agora quero todas as linhas com o seguinte começo

 <handler name="

para substituir de

 <handler name="ReplaceThis" type="com.mycompany.handler.FileBuilderHandler">

para algo assim

 <handler name="FileBuilderHandler" type="com.mycompany.handler.FileBuilderHandler">

Portanto, o atributo "name" deve ter o Classname (última parte do atributo type)

Alguém tem uma idéia de como resolver isso com um comando sed, awk, grep?

    
por Hauke 15.11.2018 / 16:05

1 resposta

1

Para a entrada estruturada idêntica à sua amostra, isso pode funcionar:

$ sed -r 's/(handler name=")[^"]*"( *type="([^.]*\.)*([^.]*)">)/"/' file
    
por 15.11.2018 / 18:14

Tags