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>
...
...

我已经以 bash 脚本的形式进行了初步尝试,通过构建一个 while 循环来读取每一行并 grep 获取所需的字符串,但我不确定这是否是最好的方法?

任何提示或指针将不胜感激。

谢谢 C

4

1 回答 1

0

假设每行不能有超过一个<machine>标签(或至少不超过一个要替换的标签),这个 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 回答