将一行的一部分替换为同一行的其他部分

将一行的一部分替换为同一行的其他部分

我确实有一个这样的文件:

<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>

现在我想要所有以以下开头的行

 <handler name="

替换自

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

像这样的事情

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

因此属性“name”应该具有类名(类型属性的最后一部分)

有谁知道如何使用 sed、awk、grep 命令解决这个问题?

答案1

对于与您的示例结构相同的输入,这可能有效:

$ sed -E 's/(handler name=")[^"]*"( *type="([^.]*\.)*([^.]*)">)/\1\4"\2/' file

相关内容