文字列検索、成功後最も近いパターン検索

文字列検索、成功後最も近いパターン検索

XML形式のファイルがあります。

 {XML file with similar tags - SubRecord and Property}
 ...

 <SubRecord>
 <Property Name="Name">My Main Search Keyword</Property>
 <Property Name="Prompt">Dummy</Property>
 <Property Name="Default">Value i'm Concerned to Modify</Property>
 </SubRecord>

 ...

私の要求。この特定のサブレコードの「デフォルト」値を取得し、条件に応じて更新します。これを行うには、この特定のタグ「name」にアクセスしてその値を変更する必要があります。

SED/AWK/GREPを使用する方法はありますか?

編集:@terdonのアップデートに基づいています。

  • すべてのセクションに1行しかありませんか?いいえ
  • デフォルトは常に最後の値ですか?常に上から3番目(名前、プロンプト、デフォルト)
  • 大文字と小文字を区別しますか?それはすべてですか?大文字と小文字を区別します。
  • 空行がありますか?そうではありません。しかし、それを取り除くために事前準備をすることはできます。
  • ファイルがインデントされていますか?はい。

例: ...

 <SubRecord>
 <Property Name="Name">Search</Property>
 <Property Name="Prompt">Some Text</Property>
 <Property Name="Default">abc.txt</Property>
 </SubRecord>

 ...

同様の属性とサブレコードを持つ大規模なXMLファイルで、まず「検索」パラメータのすべての属性を見つける必要があります。

「検索」を見つけたら、デフォルト値を確認する必要があります。 abc.txt の場合はその値を保持し、xyx の場合は継続する必要があります。 abc.txtまたはxyzの代わりにabc.txtに更新する必要があります。

ベストアンサー1

XMLはXMLをサポートするツールとして扱われるべきです。

XMLStarletはそのようなツールです。

Property属性があり、値が or でないノードの値を設定する方法は次のとおりです。NameDefaultabc.txtxyx

xml ed -u '//SubRecord/Property[@Name="Default" and . != "xyx" and . != "abc.txt"]' -v 'abc.txt' file.xml

次のXMLファイルが提供されます。

<?xml version="1.0"?>
<Record>
  <SubRecord>
    <Property Name="Name">My Main Search Keyword</Property>
    <Property Name="Prompt">Dummy</Property>
    <Property Name="Default">zzz</Property>
  </SubRecord>
  <SubRecord>
    <Property Name="Name">My Main Search Keyword</Property>
    <Property Name="Prompt">Dummy</Property>
    <Property Name="Default">abc.txt</Property>
  </SubRecord>
  <SubRecord>
    <Property Name="Name">My Main Search Keyword</Property>
    <Property Name="Prompt">Dummy</Property>
    <Property Name="Default">xyx</Property>
  </SubRecord>
</Record>

これは生産します

<?xml version="1.0"?>
<Record>
  <SubRecord>
    <Property Name="Name">My Main Search Keyword</Property>
    <Property Name="Prompt">Dummy</Property>
    <Property Name="Default">abc.txt</Property>
  </SubRecord>
  <SubRecord>
    <Property Name="Name">My Main Search Keyword</Property>
    <Property Name="Prompt">Dummy</Property>
    <Property Name="Default">abc.txt</Property>
  </SubRecord>
  <SubRecord>
    <Property Name="Name">My Main Search Keyword</Property>
    <Property Name="Prompt">Dummy</Property>
    <Property Name="Default">xyx</Property>
  </SubRecord>
</Record>

(第1条がSubRecord修正済み)

XMLStarlet は以下で使用できます。http://xmlstar.sourceforge.net/(しかし、まず自分のパッケージマネージャを確認してください)。時にはxmlstarlet実行可能ファイルがxml

おすすめ記事