2

誰かが助けてくれることを望んでいました。

特定の文字列を検索し、一致が見つかるたびに別のテキストに置き換えたい xml ファイルがあります。たとえば、結果が次のように見えるように、ファイル内の xml 内のマシン タグを使用してすべてを検索する必要があります。

...
<machine>devbox1.mydomain.com</machine>
...
<machine>devbox2.mydomain.com</machine>
...
<machine>devbox1.mydomain.com</machine>
...
<machine>devbox2.mydomain.com</machine>
...
<machine>devbox1.mydomain.com</machine>
...
...

現在、4 つの新しいシステムがあり、devbox* の出現ごとに置き換えて、次のようにする必要があります。

...
<machine>newbox1.mydomain.com</machine>
...
<machine>newbox2.mydomain.com</machine>
...
<machine>newbox3.mydomain.com</machine>
...
<machine>newbox4.mydomain.com</machine>
...
<machine>newbox1.mydomain.com</machine>
...
...

各行を読み取り、必要な文字列を grep する while ループを構築することにより、bash スクリプトの形式で最初の試みを行いましたが、これが最善の方法であるかどうかはわかりません。

ヒントや指針をいただければ幸いです。

ありがとうC

4

1 に答える 1

0

<machine>1 行に 2 つ以上のタグが存在しない (または、置換されるタグが少なくとも 1つ以上存在しない) と仮定すると、次の Python スクリプトで作業を行う必要があります。

#!/usr/bin/env python

import sys
import re
from itertools import cycle

regex = re.compile('^(.*<machine>)devbox\d+(\.mydomain\.com</machine>.*)$')
box = cycle([1, 2, 3, 4])
for l in sys.stdin:
  m = regex.match(l)
  if m:
    l = m.group(1) + 'newbox' + str(next(box)) + m.group(2)
  print(l)

それをファイルに保存し(たとえばnewboxer.py)、実行可能にすると、次を使用できます。

> ./newboxer.py < input.xml > output.xml
于 2014-08-06T11:56:55.737 に答える