파일 2개 구문 분석

파일 2개 구문 분석

이름이 2개인 파일을 구문 분석하려고 합니다 Microsoft Office. 업데이트할 때마다 파일 내용이 변경된다는 점에 유의하세요.v64.hashVersionDescriptor.xml
Microsoft Office

제 생각에는:

  1. 두 번째 줄만 인쇄하십시오 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

첫 번째 질문에 대해 두 번째 행을 추출합니다 v64.hash.

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

아니면, 얻으세요마지막파일 라인:

$ tail -n 1 v64.hash
16.0.9226.2126

두 번째 질문의 경우 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 스타먼저 VersionXML 문서에 있는 노드의 모든 하위 노드의 모든 속성을 일치시킨 다음 속성 이름과 값의 연결을 만듭니다( =중간 값 사용).

답변2

첫 번째 파일의 경우 가장 좋은 방법은 tail -n 1 v64.hash.txt
파일의 마지막 텍스트 줄을 제공하는 것입니다 v64.hash.

두 번째 파일을 구문 분석하려면 다음을 수행합니다.

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교체 후 현재 줄을 인쇄합니다.

관련 정보