我确实有一个这样的文件:
<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