2つのファイルの解析

2つのファイルの解析

名前が2つのファイルを解析しようとしていますMicrosoft Office。更新するたびにファイルの内容が変更されることに注意してください。v64.hashVersionDescriptor.xml
Microsoft Office

私の考えでは:

  1. 2行目のみ印刷してくださいv64.hash

    4172FC3F5555BA53FDF7F830773F0696
    16.0.9226.2126
    
  2. attribute="value"タグの各タグを次の場所に印刷します。<Version>VersionDescriptor.xml

    <?xml version="1.0" encoding="utf-8"?>
    <Version>
       <Available Build="16.0.9226.2126" I320Hash="0A735F1D1A6E7691006B0AC7A05F458A" I640Hash="2A462E7150280626AA23F8D362D048C3" I320Version="16.0.9226.2126" I640Version="16.0.9226.2126" />
       <DeliveryMechanism FFNRoot="492350f6-3a01-4f97-b9c0-c7c6ddf67d60" />
       <CreatedTimeUtc Value="05/11/2018 17:29" />
    </Version>
    

答え1

最初の質問に対して2番目の行を抽出しますv64.hash

$ sed -n '2p' v64.hash
16.0.9226.2126

または、入手してください最後ファイルライン:

$ tail -n 1 v64.hash
16.0.9226.2126

2番目の質問では、attribute=valueこのXMLフラグメントからすべてのペアを抽出します。

$ xmlstarlet sel -t -m '/Version/*/@*' -v 'concat(name(), "=", .)' -nl VersionDescriptor.xml
Build=16.0.9226.2126
I320Hash=0A735F1D1A6E7691006B0AC7A05F458A
I640Hash=2A462E7150280626AA23F8D362D048C3
I320Version=16.0.9226.2126
I640Version=16.0.9226.2126
FFNRoot=492350f6-3a01-4f97-b9c0-c7c6ddf67d60
Value=05/11/2018 17:29

これは使用中ですXMLスターまずVersion、XML文書内のノードのすべての子ノードのすべての属性を一致させてから、属性名と値の関連付けを作成します(=中間値を使用)。

答え2

最初のファイルの最善の方法は、tail -n 1 v64.hash.txt
ファイルの最後のテキスト行を提供することですv64.hash

2番目のファイルを解析するには:

sed -En '/^\s*<Version>\s*$/,/^\s*<\/Version>\s*$/ {
    /^\s*<Version>\s*$/ d
    /^\s*<\/Version>\s*$/ d

    s|^\s*<[^ ]+\s*(.*")\s*/>\s*|\1|
    p
}' VersionDescriptor.xml

-E拡張正規表現を使用してください。

-n明示的に指示しない限り、出力を印刷しないでください。

/^\s*<Version>\s*$/,/^\s*<\/Version>\s*$/[spaces]<Version>[spaces][spaces]</Version>[spaces]と包含の間の行にのみ適用されます。

/^\s*<Version>\s*$/ d行がある場合は[spaces]<Version>[spaces]無視してください。

/^\s*<\/Version>\s*$/ d行がある場合は[spaces]</Version>[spaces]無視してください。

s|^\s*<[^ ]+\s*(.*")\s*/>\s*|\1|行の[spaces]<[spaces]始まりと終わりを削除します。[spaces]/>[spaces]

p交換後、現在の行を印刷します。

関連情報