ubuntuusers.de

Text zw. zwei Tags extrachieren und in ein neues File schreiben

Status: Gelöst | Ubuntu-Version: Kein Ubuntu
Antworten |

joma1234

Anmeldungsdatum:
2. Juli 2019

Beiträge: 10

Hallo miteinander,

ich habe ein File das grob so aufgebaut ist:

      <file>
        <analog_andor_digital>analog</analog_andor_digital>
        <bumping_technology>bop</bumping_technology>
        <check_name>packagedrc</check_name>
        <consuming_tool>calibre</consuming_tool>
        <consuming_vendor>mentor</consuming_vendor>
        <design_context>layout</design_context>
        <function>control_file</function>
        <layerstack>1P15M_1X_h_1Xb_v_1Xe_h_1Ya_v_1Yb_h_5Y_vhvhv_2Yy2Z</layerstack>
        <path>calibre/1P15M_1X_h_1Xb_v_1Xe_h_1Ya_v_1Yb_h_5Y_vhvhv_2Yy2Z/rsf/RSF_RBOP_packagedrc</path>
        <runset_priority>signoff</runset_priority>
        <runset_type>drc</runset_type>
      </file>

In meinem File habe ich mehere Einträge wie oben beschrieben. Was ich gerne in einem kleinen Script oder Shell-Kommando hätte, wäre dass alles zwischen <file>...</file> in eine eigenständiges file geschrieben wird. Um es perfekter zu machen, wäre es toll, wenn der Name des neuen files so hieße wie der Tag <path>...</path>.

Danke für eure Hilfe!!

LG Joana

Doc_Symbiosis

Avatar von Doc_Symbiosis

Anmeldungsdatum:
11. Oktober 2006

Beiträge: 4453

Wohnort: Göttingen

Dafür kannst Du wohl xpath verwenden. Daüfr musst Du es Dir installieren:

sudo apt install libxml-xpath-perl

Wenn dann deine Datei test.xml heisst, kannst Du so, den Inhalt zwischen <file> in die Datei test2.xml schreiben, aber die Enrückungen sind dann weg:

xpath  -e '/file/*'  test.xml > test2.xml

Die Path-Information speicherst Du in die Variable $path mit folgendem Kommando:

path=$(xpath  -e '/file/path' test.xml)

Alternativ könntest Du auch xmlstarlet verwenden. Das ginge dann z.B. so, um den Path-Eintrag in die Variable $path zu füllen (ohne die Tags):

path=$(xmlstarlet sel -t -v "/file/path" test.xml)
Antworten |