라인의 일부를 같은 라인의 다른 부분으로 교체

라인의 일부를 같은 라인의 다른 부분으로 교체

다음과 같은 파일이 있습니다.

<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" 속성은 클래스 이름(type 속성의 마지막 부분)을 가져야 합니다.

이 문제를 해결하기 위해 sed, awk, grep 명령을 사용하는 방법을 아는 사람이 있습니까?

답변1

예제 구조와 동일한 입력의 경우 다음과 같이 작동할 수 있습니다.

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

관련 정보