2015-04-24 3 views
1

Ниже приведен пример XML-файла. Мне нужно подставить значение третьего тега (AAA) пятому тегу.Замените значение тега XML другим, используя оболочку

<head> 
    <firsttag> 
     <secondtag> 
      <thirdtag>AAA</thirdtag>  
      <a><thirdtag>1111</thirdtag></a> 
      <fifithtag>A123</fifthtag>  
     </secondtag> 
    </firsttag> 
    ... 
    ...  
    <firsttag>  
     <secondtag> 
      <thirdtag>AAA</thirdtag> 
      <a><thirdtag>1111</thirdtag></a> 
      <fifithtag>A123</fifthtag> 
     </secondtag> 
    </firsttag> 
</head> 

Выход должен быть

<head> 
    <firsttag> 
     <secondtag> 
      <thirdtag>AAA</thirdtag> 
      <a><thirdtag>1111</thirdtag></a> 
      <fifithtag>AAA</fifthtag> 
     </secondtag> 
    </firsttag> 
    ... 
    ... 
    <firsttag> 
     <secondtag> 
      <thirdtag>AAA</thirdtag> 
      <a><thirdtag>1111</thirdtag></a> 
      <fifithtag>AAA</fifthtag> 
     </secondtag> 
    </firsttag> 
</head> 
+0

Какие thirdtag своей стоимости? –

+0

Необходимо заменить A123 с ААА поэтому мой выход будет AAA мне просто нужно подставить значение – Kumarsforum

+0

Так это всегда первый «» в файле или (что-то еще)? Вот как я знаю, что это «AAA», а не «1111»? –

ответ

0

Я не уверен, что я полностью понял ваш вопрос, но вот AWK-скрипт, который кажется, что он делает то, что вы просите. Он не на 100% надежный, для этого вам действительно нужно что-то, что анализирует XML для реального.

AWK -f this.script < входной_файл> выходной_файл

$0 ~ "<secondtag>" { 
    S = 1 
} 

$0 ~ "</secondtag>" { 
    S = 0 
} 

$0 ~ "<thirdtag>" && S { 
    B = index($0, ">") 
    T = substr($0, B+1) 
    E = index(T, "<") 
    V = substr(T, 1, E-1) 
} 

$0 ~ "<fifthtag>" { 
    B = index($0, ">") 
    F = substr($0, 1, B) 
    T = substr($0, B+1) 
    E = index(T, "<") 
    R = substr(T, E) 
    printf "%s%s%s\n", F,V,R 
    next 
} 

{ 
    print 
} 
Смежные вопросы