複数のXMLファイルで下線を引く

複数のXMLファイルで下線を引く

複数のXMLファイル(おそらく数百のファイル)を含むディレクトリにというフィールドがあります<import_url>。このフィールドの URL には下線を含めることができます。

次の例のように、この下線をハイフンに変更したいと思います。

本質的に

<import_url>archiv/in_natur/der-beitrag-name.html</import_url>

しなければならない

<import_url>archiv/in-natur/der-beitrag-name.html</import_url>

Linuxのコマンドラインで検索して置き換える方法は?

参考までに、XMLファイル全体は次のようになります。

<article id="6577889" type="article">
  <author>
    <forename>Hans</forename>
    <surname>Wurs</surname>
    <email>[email protected]</email>
    <title></title>
    <position></position>
    <authorId>23262452</authorId>
  </author>
  <headline>Der Titel des Beitrags</headline>
  <body>
    Fringilla placerat elementum ratione? Illum blandit wisi adipisicing at sunt, proin minim. Quibusdam similique soluta, viverra 
    excepteur sem justo commodo? Congue eiusmod, temporibus doloribus urna pulvinar. Quibusdam elementum ante pretium nostra atque, 
  </body>
  <date>
    <createdDate>2020-04-30T10:44:35+00:00</createdDate>
    <publishingDate>2020-04-30T00:00:00+00:00</publishingDate>
  </date>
  <metaDescription>Faucibus quidem quo, nostrud voluptates nunc mollitia curae</metaDescription>
  <import_url>archiv/in_natur/der-beitrag-name.html</import_url>
  <taxonomy type="channel">
    <channel id="Archiv:Natur" parent="Archiv">Natur</channel>
 </taxonomy>
</article>

ベストアンサー1

正しい形式のXML文書がある場合は、XMLパーサー/エディターを使用して変更できます。

ソースファイル、/tmp/xml

<article>
  <-- other sections omitted -->
  <import_url>archiv/in_natur/der-beitrag-name.html</import_url>
</article>

改訂する

xmlstarlet edit --update '/article/import_url' --expr 'translate(., "_", "-")' /tmp/xml

出力

<?xml version="1.0"?>
<article>
  <-- other sections omitted -->
  <import_url>archiv/in-natur/der-beitrag-name.html</import_url>
</article>

一致はXPathを使用するので、//import_url必要に応じて一致させることができます。

--inplace実際にファイルを編集したい場合は、そのファイルを追加することもできます。しかし、私は通常これをお勧めしません。一時ファイルに書き込んで成功したら、ソースを置き換えることをお勧めします。

おすすめ記事